본문 바로가기

기타/CS5

전자서명 전자서명 송신자는 네트워크에서 송신자의 신원을 증명하는 방법으로, 자신의 유일한 신분(identity)을 증명할 수 있는 서명을 메시지와 함께 보낸다. 서명(signature)를 계산할 때, 메시지의 내용을 자신의 비밀키로 암화하면 수신자는 송신자의 공개키로 암호문을 해독한다. 사이버 공간에서는 정보들을 쉽게 위변조 할 수 있다. 따라서 전자 서명은 쉽게 사이버 공간에서의 인감으로 프로그램의 제작자를 확인하고, 거래를 한 사람이 자신이 맞다는 것을 증명하기 위해 나오게 되었다. 송신자의 서명은 다음과 같은 특징을 가진다. 변경 불가(Unalterable): 메시지가 변조되지 않았음을 증명할 수 있다. 서명자 인증(User Authentication): 메시지를 보낸 송신자의 신분을 증명할 수 있다. 부인.. 2023. 9. 11.
HMAC(Hash-based message authentication code) HMAC HMAC(Hash-based message authentication code)는 해시 함수와 비밀키를 사용하는 암호화 인증 기술이다. 서명 및 비대칭 암호화와는 다르게 HMAC은 공유 암호를 사용하여 인증하고 데이터가 올바르고 신뢰할 수 있는지를 확인한다. 송신자와 수신자는 통신 시 서로 주고 받는 내용이 비공개이길 원한다. 또한 인터넷은 신뢰할 수 없는 매체이기 떄문에 수신된 패킷이 변조되었는지를 확인할 방법이 필요하다. 이러한 경우 HMAC은 효과적인 해결방법이 될 수 있다. HMAC 이전에 MAC에 대해서 먼저 알아보자. MAC 메시지에서부터 해시함수를 이용해 계산된 해시값을 Message Digest라고 부른는데 이 Message Digest에 인증 정차를 추가한 것을 메시지 인증 코드.. 2023. 9. 9.
HTTPS(with 공개키 암호화 방식) HTTPS HTTPS는 웹 브라우저와 서버 간에 데이터를 전송하는데 사용되는 기본 프로토콜인 HTTP의 보안버전이다. HTTPS는 데이터 전송의 보안을 강화하기 위해 암호화된다. 이는 사용자가 은행 계좌, 이메일 서비스, 의료 보험 공급자에 로그인하는 등 중요한 데이터를 전송할 때 특히 중요하다. 그러면 HTTPS가 어떻게 작동하는지에 대해서 알아보기 위해 먼저 공개키 암호화 방식에 대해서 알아보자. 공개키 암호화 방식 최근 사용되는 대부분의 암호화 방식은 공개키 암호화 방식이다. 공개키 암호화 방식의 효시가 되는 DH 비밀키 교환 방식과 공개키 암호화 방식의 대표적인 예인 RSA 방식에 대해서 알아보자. 비밀키 암호화 방식의 문제 비밀키 암호화 방식은 암호화키를 여러 사람이 공유하기 때문에 암호화키가 .. 2023. 9. 9.
스핀락(spinlock), 뮤텍스(mutex), 세마포(semaphore) (feat. 동기화(synchronization)) 동기화(Synchronization) 하나의 객체를 두 개의 스레드가 접근하면 어떻게 될까? 왜 동기화가 중요한지에 대해서 살펴보고, 동기화를 하지 않으면 어떤 문제가 발생하는지에 대해서 살펴보자. 상한 귤 세기 예제 public class Counter { private int state = 0; public void increment() { state++; } public int get() { return state; } } for (귤 in 귤박스) { if (귤 상태 is 불량) { badCounter.increment(); } } 귤박스가 2개 있다고 가정하고 T1, T2 스레드를 사용하여 한 스레드당 하나씩 담당하게 만들었다. CPU가 싱글 코어일 때 T1, T2 스레드는 멀티태스킹 방식(다수.. 2023. 7. 18.
blocking I/O vs non-blocking I/O (feat. socket I/O) I/O I/O는 input/output의 약자로, 데이터의 입출력을 의미한다. 이러한 I/O의 종류에는 일반적으로 우리가 알고 있는 file I/O, 프로세스 간의 통신을 할 때 사용되는 pipe I/O이 있다. 그리고 일반적인 디바이스(모니터, 키보드 등)에 대한 device I/O이 있고, network(Socket) I/O에 대해서는 뒤에서 자세히 살펴보자. I/O 란? 컴퓨터는 크게 2가지 역할을 수행한다고 볼 수 있는데 하나는 연산(computing)이고, 하나는 I/O 즉, 입출력을 처리하는 것이다. 컴퓨터에서 운영체제는 이러한 입출력에 대한 수행과 물리적인 입출력 장치(하드웨어)를 관리하고 컨트롤해주고 있다. 이러한 I/O 요청이 처리되는 과정을 하나씩 알아보자. 사용자 프로세스는 열고 있던.. 2023. 7. 17.