CS
Singleton pattern 클래스가 하나의 인스턴스만을 만들 수 있도록 하고, 어디서나 생성된 인스턴스에 접근할 수 있도록 하는 디자인 패턴을 말한다.시스템에서 다른 상태의 인스턴스가 여러 개 필요 없는 경우 해당 디자인 패턴을 사용한다. 여러 객체가 생성되면 관리가 어려우며, 이를 위해 객체 생성자를 중앙 관리하게 하고, 객체가 1개라서 일관된 상태의 결과를 만들게 된다. 고전적인 싱글턴 패턴 public class Singleton { private static Singleton instance = null; private Singleton() { System.out.println("Singleton constructor"); } public static Singleton getI..
멀티 스레드 환경의 프로그램에서 공유 자원 접근에 대한 제어를 하는 것은 중요하다. 특히 순서가 중요한 일련의 과정에서의 임계구역에 대한 접근은 엄격하게 이루어져야 한다. 임계 영역과 상호 배제 임계 영역은 멀티 스레드(프로세스) 환경에서, 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원을 사용하는 코드 영역을 지칭한다. 해당 임계 영역에 대한 접근을 해결하는 방법 중 하나는 상호 배제(Mutex)이다. 상호 배제는 공유자원을 어느 시점에서 무조건 한 개의 스레드만이 사용할 수 있으며 다른 스레드들을 접근하지 못하게 제어하는 방법이다. 다른 프로세스가 번갈아 가면서 공유 자원을 사용하는 것을 목표로 한다. 교착 상태(Deadlock) 상호 배제에서 나타날 수 있는 문제점은 교착 상태이다. 나는 교..
이제 실제 사용하는 프로젝트에 암호화를 적용시켜야 한다. 프로젝트는 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 키교환 방식이란? 기본적으로 암호화와 복호화가 가능한 양방향 암호화 암호화에 사용하는 공개키와 복호화에 사용하는 개인키 두 개를 사용 누구나 암호화를 할 수 있으나, 복호화 가능한 사람은 개인키를 소유한 사람 뿐. 소인수 분해의 난해함을 이용한 암호화 방식. 키 생성하기 해당 과정은 구글링해보면 잘 나와있지만 한번 ..