CS/보안
이제 실제 사용하는 프로젝트에 암호화를 적용시켜야 한다. 프로젝트는 Node.js로 작성된 서버가 있으며, 클라이언트는 Angular(Typescript)를 사용하였다. Node.js Angular import nodeRSA from 'node-rsa' //... const rsaOption : any = { encryptionScheme :{ scheme : "pkcs1", hash : "sha256" } } var privateKey = new nodeRSA({b:1024} as any, rsaOption); // 비밀키, b는 Key의 길이 설정 var publicKey = privateKey.exportKey("pkcs1-public-pem"); //공개키, 인자에는 암호 표준 규약 종류 설정 a..
이제 API에서 RSA를 이용하기 위해서 키를 생성하고, 교환하는 과정을 거쳐야 한다. 키를 생성하여 만들어 적용시키다 보니 RSA 공개키를 전달에는 두 가지의 포맷이 있음을 알게 되었다. 인증서에 저장되어 있는 키나, API에서 전달해주는 키의 포맷은 두 가지 중 하나일텐데, 각자 인코딩 혹은 디코딩 시 취해주어야 할 내용이 다를 수 있다. 따라서 해당 두 포맷에 대해 간단하게 적어놓으려고 한다. RSA 키교환 과정 서버는 공개키와 개인키를 직접 생성, 혹은 인증서에 저장되어 있는 키를 얻어옴 클라이언트에게 제공할 공개키를 제공하는 API를 생성하거나 세션에 저장하는 등, 제공할 방법 만들기 클라이언트는 제공받은 공개키로 평문을 암호화 후 Request 서버는 받은 Request 암호문을 복호화하여 사..
예전에 개발되어서 운영중인 시스템 운영 도중 클라이언트 측의 보안 요구사항이 강화됨에 따라서 서버 보안조치 및 Request Body에 전송되는 민감정보에 대한 보안 조치를 하게 될 필요성이 있었다. 기존 단방향 암호화를 적용했던 시스템에서 HTTPS 적용 혹은 암호화 알고리즘 강화를 요구하여 내부망에서만 도는 서비스라는 점을 감안하여 RSA 키교환 방식으로 조치를 하기로 결정하였다. RSA 키교환 방식이란? 기본적으로 암호화와 복호화가 가능한 양방향 암호화 암호화에 사용하는 공개키와 복호화에 사용하는 개인키 두 개를 사용 누구나 암호화를 할 수 있으나, 복호화 가능한 사람은 개인키를 소유한 사람 뿐. 소인수 분해의 난해함을 이용한 암호화 방식. 키 생성하기 해당 과정은 구글링해보면 잘 나와있지만 한번 ..