목록분류 전체보기 (112)
Shine's dev log
암호화와 복호화때 같은 키를 사용하는 대칭키 암호화 방식에서, 다루는 데이터를 다루는 단위에 따라 블록암호와 스트림암호로 나눌 수 있다. 1. 블록암호(Block cipher)와 스트림암호(Stream cipher) 블록암호 - 평문을 블록단위로 나누어서 암호화하는 방식 - Feistel 암호와 SPN 암호로 나뉘어짐 - Feistel 암호 : DES, SPN 암호 : AES, ARIA 스트림암호 - 평문을 문자마다 바로바로 암호화하는 방식 - RC4 등이 있다. 2. Feistel 방식 (블록암호) Feistel 방식을 그림으로 나타내보면 아래와 같다. 1) 암호화할 블록을 반으로 잘라 L bits와 R bits로 나눈다. 2) R bits를 다음 라운드의 L bits로 그대로 보낸다. 3) R bit..
1. starvation 프로세스 스케줄러는 ready queue에 있는 여러 프로세스들에게 돌아가면서 illusion을 제공해준다. 하지만 모종의 이유때문에 특정 프로세스가 계속해서 CPU에 올라가지못하는 경우가 발생하는데 이 경우를 starvation 이라고 한다. 잘못된 스케줄링 정책으로 인해 starvation이 발생할 수 있다. 2. preemptive scheduling 1) Non-preemptive scheduling - 어떤 프로세스를 CPU에 올렸을 때, 스스로 반환할 때까지 얌전히 기다리는 스케줄러- jobs들이 협력하여 동작한다. 2) preemptive scheduling - 어떤 프로세스가 CPU를 쓰고 있더라도, 상황에 따라 빼았아가는 ..
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을 제공해준다고 표현하는데, 왜냐면 각 프로세스가 각자..
쓰레드를 이용하다보면 생길법한 Issues 들에 대하여 한번 살펴보자. 1. fork() 와 exec() 만약 프로세스에 여러개의 쓰레드가 실행중일 때, exec()를 만나면 어떻게될까? 답은 간단하다. 현재 프로세스에 몇개의 쓰레드가 있던간에 그냥 싹 다 밀어버리고, 새로운 프로그램을 하나의 쓰레드로 실행시킨다. 그렇다면 여러개의 쓰레드가 실행중일때, 하나의 쓰레드가 fork()를 만나면 어떻게 될까? 이는 운영체제마다 조금씩 다른데, Pthread에서는 fork()를 부른 쓰레드만 남긴다. 하지만 일부 UNIX International standard에서는 실행중인 모든 쓰레드를 그대로 복사하는 경우도 지원한다. 2. signal Handling 다음으로 만약 멀티쓰레딩 ..