

## Sodium 이란 ?

Sodium is a modern, easy-to-use software library for encryption, decryption, signatures, password hashing, and more.
It is a portable, cross-compilable, installable, and packageable fork of NaCl, with a compatible but extended API to improve usability even further.
Its goal is to provide all of the core operations needed to build higher-level cryptographic tools.
Sodium is cross-platform and cross-language. It runs on many compilers and operating systems, including Windows (with MinGW or Visual Studio, x86 and x86_64), iOS, and Android. JavaScript and WebAssembly versions are also available and fully supported. Furthermore, bindings for all common programming languages are available and well-supported.
The design choices emphasize security and ease of use. But despite the emphasis on high security, primitives are faster across-the-board than most implementations.:

- [Sodium official documentation](https://libsodium.gitbook.io/doc/).
- [Quick Manual how to use it in PHP](https://www.php.net/manual/en/function.sodium-crypto-box-seal.php).
- [Referece Manual how to use it in PHP](https://www.php.net/manual/en/book.sodium.php).

## 다보리 ERP는 
1) 각 사용자 DB의 접속정보를 sodium 으로 암호화한 후 해당 접속정보를 Frontend Locate 하고
2) 해당정보를 Backend 에 제출하고 GateToken을 리턴 받아서 해당 토큰으로 세션을 유지하 는 동시에  DB 접속정보를 Backend의 Memory DB 에만 임시로 존재하게 하는 Frontend Driven 방식을 채택함으로써
3) ISMS 보안 사항을 준수합니다.
4) 동일한 Backend API 로 다양한 Microservice Frontend 요청을 처리할 수 있는 Gateway API를 제공합니다.


## Encryption 구조 는 
1) 최초에 작성된 sodium Key Pair는 SSO 서버에 별도로 저장이 됩니다.
2) Frontend 에는 .env.dabory에 BeforeBase64 Key에 DB 접속 정보가 저장됩니다.
3) Frontend 가 Backend API 를 사용하기 위해서 최초에 Client Id와 BA64 Key를 제출하면 GateToken을 Return  받습니다.
4) 이 때 Backend API 서버의 Memory DB에 해당 GateToken과 연관된 DB접속 정보가 생성되어 이후 DB 접속을 반복할 수 있습니다. 
5) Key pair는 SSO 서버에 저장되고 가져오는 것이 기본으로 되어 있으나 Backend API 서버의 conf 화일에 저장해서 운용됨으로써 SSO 서버와의 독립적으로 운영될 수 있습니다. 


## Sodium 관련 소스 코드 

Frontend에서 Sodium과 관련된 소스코드

- [ KeyPair/PublicKey 등을 를 생성하는 일반적인 PHP Code ](https://www.php.net/manual/en/function.sodium-crypto-box-seal.php).

- [Sodium 사용 Ajax 제공 (260~262 Lines)](http://git.daboryhost.com:10880/dabory/dbrerp/src/master/routes/web.php).
- [ DB 정보 암호화 how to use it in PHP (254~263 Lines)](http://git.daboryhost.com:10880/dabory/dbrerp/src/master/resources/views/front/dabory/pro/my-app/popup/popup-form1/form-a/client-app-form.blade.php).


**A. Ajax를 이용하여 Sodium function 구성 이유.** 

    팝업 div에서 직접 PHP 코드를 사용할 수 없으므로 Ajax를 이용하여 Sodium function 을 서비스 합니다
