목록분류 전체보기 (111)
Shine's dev log
1. 치환암호(Substitution Cipher) 치환암호는 하나의 단위가 다른문자로 치환되는 암호이다. 여기서 단위란 하나의 문자일수도있고, 한쌍의 문자일수도있고, 세개의 문자일수도 있다. 수신자는 송신자가 수행한 치환의 역과정을 통해 복호화한다. 대표적으로 Caesar 암호, One time pad 등이 있다. One time pad는 보내려는 메시지에 랜덤한 숫자를 XOR연산하는 방식으로, 수신자는 송신자가 쓴 랜덤한 숫자로 XOR연산을 다시 해주면 복호화가 된다. 이론상 완벽한 암호시스템이지만, 송수신자 사이에 synchronization이 필요하고 메시지길이만큼의 키가 필요하다는 단점이 있다. 치환암호는 frequency analysis에 약한데, frequency analysis란 주로 쓰이..
1. 암호의 원리 암호를 사용한 과정으로는 크게 암호화(Encryption)과 복호화(Decryption)을 생각해볼 수 있다. 암호화(Encryption)란 본래의 메시지 내용을 인코딩하여 그 의미를 없애는 과정이고 복호화(Decryption)란 암호화의 역과정이다. 이 관계를 수식으로는 C = E(P), P = D(C) = D(E(P)) 이렇게 나타낼 수 있다. 2. 키(Key) 암호화와 복호화시에 계속해서 등장하는 개념중 하나가 바로 키(Key)이다. 키는 암호화시에 사용되는 일련의 정보로서, 송신자와 수신자만 알고 있는 정보이다. 물론 키 없이도 암호화 알고리즘을 사용할 수 있지만(e.g. caesar cipher) 1) 비밀유지가 힘들고 2) 새로운 알고리즘을 만들기 어렵고 3) 알고리즘을 설명..
1. 프로세스 스케줄링이란? 하나의 컴퓨터에서는 여러개의 프로세스가 각자의 address space를 가지고 실행될 수 있다. 만약 processor의 수가 process의 수보다 적다면, 프로세스를 parallel하게 운영하는 것은 불가능할 것이고, concurrent하게 운영해야 할 것이다. 즉, 여러개의 프로세스를 조금씩 돌려가며 실행시켜야 한다는 것이다. 여기서, 다음 프로세스는 뭘 돌릴지, 어디부터 돌릴지, 언제 바꿀지를 결정하는 녀석이 바로 Schedular 이다. 참고로 이 스케줄러는 운영체제에 포함되어 있다. Schedular는 processor에게 각 프로세스의 address space를 매핑해준다. 이를 illusion을 제공해준다고 표현하는데, 왜냐면 각 프로세스가 각자..
세상이 점점 인터넷으로 연결될수록 그에따라 사이버 상에서의 범죄도 많이 일어나고있다. 그러면서 사이버보안 이라는 주제가 점점 더 중요해지고 있다. 앞으로는 사이버보안 중에서 네트워크 보안에 대하여 공부하며 글을 써볼 예정이다. 오늘은 사이버 보안에 대하여 기초적인 개념을 정리해보자. 1. 보안의 핵심 3요소 보안의 3요소는 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)이다. 이는 내가 사이버보안학과에서 첫수업때부터 들었던 말일 정도로 가장 기초적이고, 핵심적인 개념이다. 기밀성(confidentiality)는 정보에 허가된 대상만 접근이 가능하게 하는 것이다. 무결성(Integrity)는 정보가 변경되는 것으로부터 보호하는 것이다. 가용성(Availa..
쓰레드를 이용하다보면 생길법한 Issues 들에 대하여 한번 살펴보자. 1. fork() 와 exec() 만약 프로세스에 여러개의 쓰레드가 실행중일 때, exec()를 만나면 어떻게될까? 답은 간단하다. 현재 프로세스에 몇개의 쓰레드가 있던간에 그냥 싹 다 밀어버리고, 새로운 프로그램을 하나의 쓰레드로 실행시킨다. 그렇다면 여러개의 쓰레드가 실행중일때, 하나의 쓰레드가 fork()를 만나면 어떻게 될까? 이는 운영체제마다 조금씩 다른데, Pthread에서는 fork()를 부른 쓰레드만 남긴다. 하지만 일부 UNIX International standard에서는 실행중인 모든 쓰레드를 그대로 복사하는 경우도 지원한다. 2. signal Handling 다음으로 만약 멀티쓰레딩 ..
1. Thread Library 우리가 실제로 코딩을 할 때, 쓰레드를 새로 만들거나 관리하고싶다면 Thread library를 살펴봐야한다. 리눅스계열에서는 Pthread라는 라이브러리를 사용하는데, 이 라이브러리는 운영체제가 주는 기능들을 쓸 수 있게 API를 제공해준다. Pthread 에서는 쓰레드 creation, synchronization 등과 같은 여러 기능들을 제공해주는데, 일정한 standard만 정의되어 있을 뿐, 직접적으로 구현하는것은 사용자들의 몫이다. 2. 쓰레드를 보는 두가지 관점 우리가 멀티쓰레드 모델을 살펴보기 전에, 쓰레드를 보는 두가지 관점을 먼저 알아봐야한다. 쓰레드는 운영체제가 볼때와 어플리케이션이 볼 때 그 모양이 다를 수 있다. 이는 ..