[시저암호]
- 줄리어스 시저가 사용하였다는 암호. / 평문으로 사용되는 알파벳을 일정한 문자 수만큼 평행 이동 시킴으로써 암호화를 행한다.
- 예) 3문자 평행이동 -> abc 암호화 결과는 def
- a b c d e f g h i j k l .......z
- ------d e f g h i j k l m n ..........z
[전사공격]
- 암호해독하기위한 키를 모르는 상황에서 키가 될 수 있는 모든 가능한 후보들을 시도하여 해독하는 작업. / 전수탐색/라운드로빈법/이 잡기법 라고도 불린다.
[단일 치환 암호]
- 시저암호 방법에서 개선된 방법으로 평문의 알파벳 26문자를 무작위 순서로 나열하여 이 집합과 순서대로 된 알파벳 집합을 일대일 대응 하여 암호화하는 방법
- 예) abc 암호화 결과는 ehf 가 될 수도 있도 다른 대응된 알파벳이 될 수도 있다.
- a b c d e f g h i j k l .......z
- e h f u e s y x n v p i .....
[에니그마]
- 독일의 세르비우스에 의해 20세기 초에 발명된 암호화/복호화를 수행하는 기계. 독일어로 수수께끼를 의미.
- 에니그마로 암호화/복호화 하기위해서는 코드북이 있어야한다.
[일회용 패드] - 절대 해독 불가능한 암호 / 64비트 암호화
- 평문과 랜덤한 비트열과의 XOR만을 취하는 단순한 암호
- XOR은 둘중에 하나라도 1이면 1이고 그 외는 모두 0이다.
- 예) MIDNIGHT를 ASCII로 부호화했을때의 비트열
- 01101101 01101001 01100100 01101110 01101001 01100111 01101000 01110100
- 01101011 11111010 01001000 11011000 01100101 11010101 10101111 00011100 --> 평문의 길이와 같은 64비트의 랜덤한 비트열
- 00000110 10010011 00101100 10110110 00001100 10110010 11000111 01101000 --> 암호화 결과
[DES : Data Encryption Standard ]
- 1977년에 미국의 연방정보처리표준규격으로 채택된 대칭 암호. 전 세계의 정부나 은행등에서 널리 이용되어 왔다.
- 64비트 평문을 64비트 암호문으로 암호화하는 대칭 암호 알고리즘. 키의 비트 길이는 56비트이다. 7비트마다 오류검출을 위한 정보가 1비트씩 들어가기 때문에 실질적으로는 56비트가 된다.
- DES의 기본 구조는 페이스텔이 만든 것으로 페이스텔 네트워크, 페이스텔 구조 혹은 페이스텔 암호라 부릴고 있다.
- 1999년의 DES Challenge III에서 22시간 15분만에 키가 깨졌다.
[트리플 DES] - tripple DES
- DES보다 강력하도록 DES를 3단으로 겹치게 한 암호 알고리즘이다. 3DES 등으로 불리기도 한다.
[AES : Advanced Encryption Standard]
- 지금까지 표준이었던 DES를 대신하여 새로운 표준이 된 대칭 암호 알고리즘이다.
- AES최종 후보 5개 [MARS (IBM사) , RC6 (RSA사) , Rijndael (Daemen, Rijnmen) - 채택 , Serpent (Anderson, Biham, Knudsen), Twofish (Counterpane사) ]
[Rihndael]
- 벨기에의 연구자 Joan Daemen과 Vincent Rijmen가 설계한 블록 암호 알고리즘으로 2000년에 차세대의 표준 암호 알고리즘으로서 선정되었다.
[블록 암호 모드]
- DES 와 AES는 블록 암호라서 고정 길이 비트의 평문밖에 암호화할 수 없다. 임의의 길이의 평문을 암호화하기 위해서는 평문을 일정한 길이를 갖는 블록으로 나누고 각 블록에 블록 암호를 반복 적용하여 암호화를 할 필요가 있다.
- 암호 알고리즘은 블록 암호와 스트림 암호 2개로 나눌 수 있다고 하였다.
- 블록암호는 어느 특정 비트 수의 집합을 한 번에 처리하는 암호 알고리즘을 총칭한다.
- 이 집합을 블록이라고 한다. 그리고 블록의 비트 수를 블록길이 라고 한다.
- DES나 트리플 DES의 블록 길이는 64비트이다. 이들 암호 알고리즘은 64비트의 평문을 하나의 단위로 간주하여 암호화하고 64비트의 암호문을 만들어 출력한다.
- AES의 블록 길이는 128비트, 192비트, 256비트 중에서 고를 수 있다.
- 스트림암호는 데이터의 흐름을 순차적으로 처리해가는 암호 알고리즘의 총칭이다. 스트림 암호에서는 1비트, 8비트, 32비트 등의 단위로 암호화와 복호화가 이루어진다.
- 대표적인게 일회용 패드 암호화이다.
- 블록암호모드
- ECB모드 : Electric CodeBook mode(전자 부호표 모드)
- CBC모드 : Cipher Block Chaining mode(암호 블록 연쇄 모드)
- CFB모드 : Cipher-FeedBack mode(암호 피드백 모드)
- OFB모드 : Output-FeedBack mode(출력 피드백 모드)
- CTR모드 : Counter mode(카운터 모드)
- 평문블록이란?
- 블록암호 알고리즘에서 암호화의 대상이 되는 평문을 말한다. 평문 블록의 길이는 블록 암호 알고리즘의 블록 길이와 같다.
- 암호문 블록이란?
- 블록 암호 알고리즘을 써서 평문 블록을 암호화한 암호문을 말한다.
- ECB모드
- ECB모드에서는 평문 블록을 암호화한 것이 그대로 암호문 블록이 된다. / 만약 맬로리가 악의를 가지고 암호문 블록을 서로 바꾸었다고 하면 수신자가 잘못 오해할 수 있다.
- 블록1 = 송금자의 은행 계좌 번호 / 블록2 = 송금처의 은행 계좌 번호 / 블록3 = 송금액
- CBC모드
- 1단계 전에 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR하고 나서 암호화를 수행한다.
- 만약 평문블록1과 2의 값이 같은 경우라도 암호문 블록1과 2의 값이 같아진다고는 할 수 없다. 따라서 ECB가 갖고 있는 결점이 CBC모드에는 없다.
- CFB모드
- 1단계 앞의 암호문 블록을 암호 알고리즘의 입력으로 사용한다. ECB모드나 CBC모드에서는 암호 알고리즘을 이용하여 평문 블록을 암호화하였다. 그러나 CFB모드에서는 평문 블록을 암호 알고리즘으로 직접 암호화하고 있지 않는다는 점을 알 수 있다.
- 재전송 공격이 가능하다는 단점이 있다.
- OFB모드
- 암호 알고리즘의 출력을 암호 알고리즘의 입력으로 피드백한다.
- 평문블록과 암호알고리즘의 출력을 XOR해서 암호문 블록을 만들어내고 있다. / CBC모드나 CFB모드와 마찬가지로 초기화 벡터를 사용한다.
- CTR모드
- 1씩 증가해가는 카운터를 암호화해서 키 스트림을 만들어 내는 스트림 암호이다.
[키 배송문제 해결을 위한 4가지 방법]
- 암호화/복호화에 사용되는 키를 암호문과 같이 배송할때 도청자에게 캐치될 수 있다는 문제점.
- 키 사전공유 방법
- 안전하게 보낼수있는 방법도 없을 뿐더러 대상자가 천명 만명이 된다면 이 또한 문제가 된다.
- 키 배포센터에 의한 문제 해결
- 대상자가 많아질수록 센터의 서버 부하가 가중화 된다. / 배포센터가 해킹되면 게임셋이다.
- Diffie-Hellman 키 교환에 의한 해결
- 암호 통신을 원하는 두 사람이 있다면 어떤 정보를 교환한다. 이 정보는 도청자가 읽어도 괜찮다. 두 사람은 지금 교환한 정보를 가지고 동일한 키를 각각 만들어 낼 수 있다. 그런데 도청자는 같은 키를 만들 수 없다.
도청자는 두 사람이 교환한 정보를 도청할 수 있지만, 그것만으로는 통신하고 있는 두 사람과 동일한 키를 만들어 낼 수는 없는 것이다.
- 공개 키 암호에 의한 해결
- 수신자는 미리 암호화키를 송신자에게 알려준다. 이 암호화키는 도청자에게 알려져도 괜찮다. 송신자는 그 암호화키를 써서 암호화해서 수신자에게 보낸다.
복호화할 수 있는 것은 복호화키를 가지고 있는 수신자 뿐이다.
[공개키 암호 - public-key cryptography]
- 암호화키와 복호화키가 분리되어 있다.
- 송신자는 암호화 키를 써서 메시지를 암호화하고, 수신자는 복호화키를 써서 암호문을 복호화한다.
- 이해할 사항
: 송신자가 피룡한 것은 암호화키 뿐이다.
: 수신자가 필요한 것은 복호화키 뿐이다.
: 도청자에게 알려지면 곤란한 것은 복호화키 이다.
: 암호화키는 도청자에게 알려져도 괜찮다.
- 암호화키는 일반에게 공개할 수 있다. 공개해도 상관이 없으므로 이 키를 공개키 라 부른다.
- 복호화키는 절대로 공개해서는 안된다. 이 키는 당신만이 사용하는 것이다. 그래서 개인키 라 부른다.
- 공개키와 개인키는 둘이 한 쌍이 된다. 이것을 가리켜 키쌍 이라고 부른다. 공개키로 암호화한 암호문은 그 공개키와 쌍이 되는 개인키가 아니면 복호화할 수 없다.
- 통신흐름 예
: 밥은 공개키/개인키로 이루어진 한 쌍의 키를 만든다.
: 밥은 자신의 공개키를 앨리스에게 보낸다.
: 앨리스는 밥의 공개키를 써서 메시지를 암호화한다.
: 앨리스는 암호문을 밥에게 보낸다.
: 밥은 자신의 개인키를 써서 암호문을 복호화한다.
- 암호화 때는 E(encrypt)와 N(number)이 필요하다.
- 복호화 때는 D(decrypt)와 N(Number)이 필요하다.
- 공개키 암호가 등장했다고 해서 대칭암호가 없어지는 것은 아니다. 공개키 암호의 실행속도는 대칭 암호의 실행속도보다 훨씬 느리기 때문이다.
[다른 공개키 암호]
- ElGamal : RSA는 소인수분해가 곤란하다는 것을 이용했지만, ElGamal 방식에서는 mod N으로 이산대수를 구하는 것이 곤란하다는 것을 이용한다.
암호문의 길이가 평문의 2배가 되어 버린다는 결점이 있다. 암호 소프트웨어 GnuPG에 구현되어 있다.
- Rabin : mod N으로 평방근을 구하는 것이 곤란하다는 것을 이용하고 있다. RSA는 큰 수 N을 소인수분해 하지 않아도 해독할 수 있는 가능성이 있지만, Rabin방식에 의한 공개키 암호의 해독은 소인수분해를 행하는 것과 같은 정도로 어렵다는 것이 증명되어 있다.
- 타원곡선암호(elliptic curve cryptosystems; ECC) : RSA에 비해 키의 비트 수를 적게 할 수 있는 것이 특징이다. 타원곡선이라 불리는 곡선을 정하고, 그 곡선상에 있는 점에 대하여 특수한 멱제곱을
정의한다. 타원곡선 암호에서는 이 멱제곱의 역연산이 어렵다는 것을 이용한다.
[하이브리드 암호시스템]
- 대칭암호와 공개키 암호의 장점을 살릴 수 있도록 조합한 방법이다.
[강한 하이브리드 암호시스템]
- 하이브리드 암호 시스템에서는 대칭 암호와 공개키 암호 두가지를 모두 사용한다. 어느 쪽인가 한 쪽의 키 길이가 극단적으로 짧으면 공격이 그쪽으로 집중될 가능성이 있으므로,
대칭 암호와 공개키 암호의 키 길이는 양쪽이 같은 정도의 강도가 되도록 길이를 맞추는 것이 바람직할 것이다.
단, 장기간의 운용을 고려한다면 대칭 암호보다도 공개 키 암호쪽을 강하게 해야한다. 왜냐하면 대칭암호의 세션키가 뚫렸을 때 해독되는 것은 해당 통신에 사용하는 통신문뿐이지만,
공개키 암호가 뚫렸을 때는 과거뿐만 아니라 앞으로 있을 암호통신 전체가 해독되어 버리기 때문이다.
[일방향 해시함수]
- 입력과 출력이 각각 1개씩 있다. 입력은 메시지라고 하고, 출력은 해시값이라 한다. 일방향 해시함수는 메시지를 기초로해서 해시값을 계산한다.
- 몇백 메가바이트나 되는 파일의 무결성을 확인하고 싶은 때에도, 일방향 해시 함수를 사용하면 짧은 해시 값을 비교하는 것만으로도 충분하다.
- 성질
: 임의의 길이 메시지로부터 고정 길이의 해시 값을 계산한다.
: 해시 값을 고속으로 계산할 수 있다.
: 메시지가 다르면 해시 값도 다르다.
: 일방향성을 갖는다. (복호화를 할 수 없다는 뜻)
- 종류
: MD4, MD5 : 128비트 해시값을 갖는다. (MD는 Message Digest)의 약자이다.
: SHA-1, SHA-256, SHA-384, SHA-512 (SHA-1은 160비트의 해시값을 갖는다. 256, 384등은 비트..)
: RIPEMD-160 : 150비트의 해시 값을 갖는 일방향해시함수.
[메시지 인증코드 - message authentication code]
- 무결성을 확인하고 메시지에 대한 인증을 하는 기술이다. 첫글짜를 따서 MAC라고 부른다.
- 이용순서
: 송신자 앨리스와 수신자 A은행은 사전에 키를 공유해둔다.
: 송신자 앨리스는 송금 의뢰 메시지를 작성한 뒤 이 메시지의 MAC값을 계산한다.
: 송신자 앨리스는 수신자 A은행에게 송금 의뢰 메시지와 MAC값을 보낸다.
: 수신자 A은행은 수신한 송금 의뢰 메시지를 기초로 해서 MAC값을 계산한다.
: 수신자 A은행은 앨리스로부터 수신한 MAC값과 자신이 계산해서 얻은 MAC값을 비교한다.
: 수신자 A은행은 이 2개의 MAC값이 동일하면 송금의뢰가 틀림없이 앨리스로부터 온 것이라고 판단한다. 동일하지 않다면 앨리스로부터 온 것이 아니라고 판단한다.
[메시지 인증코드 실현방법]
- 일발향 해시 함수를 이용한 실현
: SHA-1이나 MD5와 같은 일방향해시함수를 이용하여 메시지 인증 코드를 실현할 수 있다. 그 중 하나로 HMAC가 있다.
- 블록 암호를이용한 실현
: 트리플 DES나 AES와 같은 블록암호를 사용해서 메시지 인증코드를 실현할 수 있다.
- 그 밖의 방법으로 실현
: 스트림 암호나 공개키 암호등을 사용해서 메시지 인증코드를 실현할 수 있다.
[HMAC]
- 일방향 해시 함수를 이용하여 메시지 인증 코드를 구성하는 방법이다. H는 hash를 의미한다.
[디지털 서명]
- 메시지 인증코드는 부인방지에는 도움이 되지 않는다. 이유는 메시지 인증코드를 사용하기 위해서는 송신자 앨리스와 수신자 밥 두 사람이 키를 공유할 필요가 있었기 때문이다.
키를 공유하고 있기 때문에 메시지 인증 코드를 사용해서 바른 MAC값을 계싼할 수 있는 것은 송신자 앨리스만은 아니다. 수신자 밥도 바른 MAC값을 계산할 수가 있다.
앨리스와 밥 양쪽 모두 바른 MAC값을 계산 할 수 있기 때문에 그 메시지는 분명히 앨리스의 것이다. 라는 것을 제 3자에게 증명할 수 없는 것이다.
앨리스가 사용하는 키는 앨리스만이 알고 있는 개인적인 것이라고 하자. 앨리스는 메시지를 송신할 때 그 개인적인 키를 써서 서명을 작성한다. 한편 수신자 밥은 앨리스의 키와는 다른 키를 써서 서명을 검증한다. 밥의 키를 사용한다고 해도 메시지로부터 서명을 작성하는 것은 할 수 없다. 하지만 밥의 키를 사용하면 앨리스가 계산한 서명은 분명히 앨리스의 키를 써서 계산한 것이라고 알 수 있다. 이런식으로 잘 된다면 조작의 검출, 거짓행세의 검출 그리고 부인방지를 할 수 있는 기술로서 사용이 된다.
이게 디지털 서명이다.
'IT > 트렌드&개념공부&TIP' 카테고리의 다른 글
자료구조 종류 간단한 정리 (0) | 2021.02.01 |
---|---|
객체지향 5원칙 (0) | 2021.01.31 |
객체지향 방법론. 책 내용 정리 (0) | 2021.01.31 |
리팩토링이란? (0) | 2021.01.24 |
Head First Design Pattern 정리 (0) | 2021.01.24 |
댓글