2016년 11월 17일 목요일

2. Encryption [암호화 알고리즘]

암호화 알고리즘

이전 Chapter에서 운영모드를 배웟었다.

이번 Chapter에서는 어떤 운영모드 즉, 실제 어떤 암호화 알고리즘을 쓸지에 대해 정해보고 암호화 알고리즘이 어떻게 기능하고 다른 암호화 알고리즘과의 차이에 대해 설명하겠다.

운영모드 선택

운영모드를 선택을 할때 확산과 혼돈을 기준으로 선택해야 한다.
이런 기준을 어느정도 만족시켜 안정하다고 NIST(미국 국립 표준 기술 연구소)에서 표준으로 정한 9가지 운영 모드가 있다. 이것들은 기밀성 모드, 무결성 모드 , 기밀성+무결성 모드로 나누어 볼수 있다.











data를 hide하려고 하려면 위의 운영모드중에 기밀성 모드를 사용한다. 우리는 널리 사용되는 ECB, CBC, CFB , OFB ,CTR에 대해서만 알아보겠다.
아! 들어가기 전에 암호 시스템 공격 유형이 어떤 것이 있는 지 알아보고 가자.

  • COA(Ciphertext Only Attack) : 공격자가 암호문만 알 때
  • KPA(Known Plaintext Attack): 공격자가 원문의 일부와 그 일부에 해당하는 암호를 알때
  • CPA(Chosen Plaintext Attack): 공격자가 원문의 일부를 마음대로 선택하여 그에 해당하는 암호문을 확인할 수 있을 때

위의 공격 위험도는 CAP, KPA ,COA순으로 높다.  


ECB 모드











위 사진과 같이 먼져 메시지를 블록 단위로 자르고 각 블록을 암호화 하여 그 결과물(Ciphertext)을 합치는 단순한 알고리즘이다. 원문중에 동일한 블록이 있을경우 결과물도 당연 같으므로 암호문을 보고 원문에 대한 정보를 추측가능하다. 즉, 확산을 달성하지 못하는 암호화 알고리즘이다. 그래서 실세계에서 이 알고리즘은 잘 사용되지 않습니다.

CBC 모드




EBC의 단점인 블록단위로 나뉜 원문이 같은 경우 암호화 결과물도 같다는 단점을 보완하기 위해 위와 같은 CBC 운영모드가 개발되었다.
EBC와 같이 원문(message[0]+message[1] ... +message[3])을 같은 크기의 블록 단위로 나누고 첫번째 블록(message[0])을 사용자가 지정한 특정한 값과 XOR연산을 하고 암호화 해서 암호문(ciphertext[0])을 생성하는 것이다.
사용자가 지정한 특정한 값을 초기화벡터(IV)이라고 하는데 고정 IV, counter IV , 난수 IV, Nonce IV가 있다. 초기화 벡터가 난수의 성질을 가질수록 암호문은 더 복잡해질것이고 안정할 것이다.
그리고 첫번째 암호문(ciphertext[0])을 두번째 블록 블록(message[1])과 XOR연산을 하고 암호화 해서 2번째 암호 결과물(ciphertext[1])을 생성시킨다. 그 이후의 블록들은 이 과정을 반복한다.
CBC모드는 '확산' 을 성공적으로 달성시키는 장점에 비해 특정 부분만 선택해서 복호화 할 수 없다는 단점이 있다.

CFB 모드와 OFB 모드

CFB(Cipher FeedBack)과 OFB(Ouput FeedBack) 모드들은 CBC운영모드의 응용이라고 볼수 있으므로 CBC 모드를 이해했다면 쉽게 이해 할수 있을 것이다.
(CFB , OFB 모드도 블록 단위로 나눈다)


CFB 모드
CBC에서는 초기벡터 원문과 XOR 연산을 하고 그 결과값을 키로 encryption 했다면 위 그림과 같은 CFB IV벡터를 키로 encryption 하고  그 결과값을 원문과 XOR하는 것이다.  그리고 첫번째 ciphertext를 key로 encryption하고 두번째 원문과 XOR연산한다. 이 과정을 반복한다.

OFB 모드

OFB모드가 CFB모드와 다른것은 사진에서 보이듯이 이전 블록의 ciphertext을 다음 블록에 쓰이는 것이 아니라 XOR 연산을 하기전에 key로 encryption해서 나온 결과값이 다음 블록에 쓰인다.
즉 OFB모드는 다른 모드와 다르게 순차적으로 암호화 알고리즘을 수행할 필요 없이 XOR하기 직전 값들을 미리 계산해 두었다가 한꺼번에 암호화 할 수있다는 강점을 가진다.
하지만 장점이 있다면 그에 상응되는 단점도 있다. 바로 초기화 벡터가 암호 알고리즘을 반복해서 거치는 과정에서 암호화 알고리즘 수행 결과 값에서 주기성이 발견되면 안정성에 문제가 생긴다.
또한 OFB 암호 시스템 두 개가 동일한 초기화 벡터를 사용할시 한 원문을 알게 되면 다른 시스템의 원문도 알수 있게 된다.  그래서 OFB 운영모드를 사용할 경우 안정성을 신중히 고려해서 사용해야 한다.

CTR 모드


CTR모드는 사진과 같이 각 블록에 사용되는 사용되는 Nonce값(단 한번만 사용되는 숫자)이 다 다르게 적용되는 알고리즘이다.
즉, 초기화 벡터로 Nonce 를 넣고 그다음 블록 부터는 첫번째 넌스값에 1씩 더해 난수를 생성한다. 그저 1씩 더한다고 블록마다 완전히 다른 난수 값을 없다고 생각할텐데 오산이다. 그 이유는 암호 알고리즘의 'Avalanche Effect(쇄도 효과)' 때문이다. 쇄도 효과는 입력값을 아주 조금만 바꿔도 출력 값이 완전히 달라지는 것을 의미한다. 그래서 확산 의 성질을 효과적으로 수행한다.
CTR은 OFB 모드의 강점을 가지면서 확산을 강화한 운영모드이다.


0 개의 댓글:

댓글 쓰기