■ 암호
- 암호란 비밀을 유지하기 위하여 당사자끼리만 알 수 있도록 꾸민 약속 기호, 평문↔암호문으로 변환하기 위한 원리, 수단, 방법 등을 취급하는 기술 또는 과학
- 암호학(Cryptology) 측면에서의 암호로 메시지 암호화ㆍ복호화를 수행하는 알고리즘
- 암호의 원리 : 전치ㆍ치환암호와 스트림ㆍ블록암호로 분류 가능
★ 암호기법의 종류
- 전치암호 : 선형 [1:1 자리를 바꾸는 규칙, 재배열]
ex) ROT13(위치교환)
- 치환(대치) : 비선형 [1:1 대응이 아니어도 상관없다, 교환]
ex) XOR연산(바꿔치기)
- 스트림 암호 : 데이터 흐름(스트림)을 순차적으로 처리해가는 암호 알고리즘의 총칭
ex) 오디오/비디오 스트리밍
- 블록암호 : 평문을 일정한 크기의 블록으로 잘라낸 후 암호화 알고리즘을 적용해 암호화
ex) 데이터 전송, 스토리지 저장
* 대칭키 방식 : 비밀키 이용
비대칭키 방식 : 공개키/개인키
대칭키 = 비밀키 = 관용키 = 세션키 = 비공개키 |
비대칭키 = 공개키 = 사설키 |
★ 전치암호 (Ransposition Cipher)
- 평문을 구성하는 문자 위치를 서로 바꿔 재배열하는 방식
- 위치만 이동한다. 즉 선형으로 평문과 암호문이 1대1로 매치가 되는 것이다
ex) ABCDE → CBEAD
★ 대치암호 (=치환암호, Substitution Cipher)
- 평문의 각 문자를 새로운 문자로 대치하는 방식
- 평문의 각 원소에 다른 원소를 사상시키는 것 (치환)
- 대치암호(치환암호)의 특징은 암호문과 평문의 1의 개수가 일치하지 않는다는 것.
- 비선형으로써 평문과 암호문이 1대 n으로 매치됨
- 평문을 XOR 연산하여 암호화하는 스트림 암호가 여기 속함
ex) 010110(평문, 1의 개수 3) - 111000(Key) -XOR(같으면 0, 다르면 1)- 101110 (1의 개수 4)
★ 스트림 암호 (Stream Cipher)
- 한 번에 한 바이트씩 암호화되는 형식, 처음엔 초기값을 필요로 한다
- 평문을 키 생성알고리즘 비밀키로 XOR 연산하여 암호화하고, 그 암호문을 기밀성과 무결성이 보장되는 채널을 통하여 받은 비밀키로 복호화하여 평문으로 만든다
★ 블록암호 (Block Cipher)
- 대칭키 방식에서 사용하는 비밀키를 이용하여 고정된 크기의 입력 블록을 고정된 크기의 출력 블록으로 변형하는 암호 알고리즘. 이때 출력 블록의 각 비트는 입력 블록과 키의 모든 비트에 영향을 받는다
- 입력을 한 번에 하나의 원소 블록씩 처리
- Round를 사용하고, 반복적으로 암호화 과정을 수행해 암호화 강도를 높임
- 평문을 일정한 블록단위로 나눠 각 블록마다 암호화 과정을 수행해 고정된 크기의 블록단위 암호문 생성
- DES, AES, SEED, HIGHT, IDEA, RC5, ARIA. 즉, 대칭키 방식은 모두 블록 방식
- 블록 방식에는 Feistel 방식과 SPN 방식이 있음
① Feistel 방식
- 평문을 블록으로 나눈 뒤 각각의 블록을 선형과 비선형으로 나눔
- 암호 알고리즘과 복호 알고리즘이 같다
- Feistel 암호 방식의 강도를 결정짓는 요소는 '평문 블록의 길이', '키의 길이', '라운드 수' 이다
② SPN 방식
- 평문을 블록으로 나눈 뒤 각각의 블록을 선형과 비선형으로 분할하지 않는다
- 암호, 복호 알고리즘이 다르다
- 분할과정이 없어 Feistel 구조보다 간단하다
- AES : 128bit 10R, 196bit 12R, 256bit 14R, 열혼합 과정 추가(Mix columns)
- 입력을 여러 개의 소블록으로 나누고 각 소블록을 S-box로 입력하여 대치(substitution) 시키고 S-box의 출력을 P-box로 전치(permutation)하는 과정을 반복하는 형식
* P-box : P-박스는 문자 단위로 암호화를 수행하였던 고대 전치암호를 현대에서 병렬적으로 수행하는 것
- 단순(straight) P-박스 : 역함수 존재
- 축소(Compression) P-박스 : 역함수가 존재하지 않음
- 확장(Expansion) P-박스 : 역함수가 존재하지 않음
** S-box
- 치환암호의 축소 모형
- 입력과 출력의 개수가 달라도 됨. 즉 S-박스에서 입력은 n비트, 출력은 m비트일 때, n과 m이 서로 같을 필요는 없다
- S-박스 구성 요소는 이동(shift), 교환(swap), 분할(split), 전치(transposition, P-박스), 치환(substitution, S-박스), XOR연산(exclusive-OR) 등이 있음
비교 | Feistel | SPN |
역함수 | 암ㆍ복호화 과정에서 필요 없음 | 암ㆍ복호화 과정에서 필요 |
분할 | 분할 필요 연산량이 많이 소요 |
분할 없이 한 번에 처리 비교적 덜 복잡한 연산 |
안전성 측면 | 라운드 함수의 안전 설계 중요 | Feistel에 비해 효율적 설계 가능 |
대표 암호 | DES, LOKI, Blowfish, RC5 | AES, SAFER, IDEA, SHARK |
■ 블록암호 알고리즘 운영모드
ⓐ ECB (Electric Codebook)
- 평문 블록을 그대로 암호화 하는 방식
- 동일 평문에 동일 암호문이라는 약점이 있음
- 코드북(codebook)이라 하며, 가장 간단하게 평문을 동일한 크기의 평문 블록으로 나누고 키로 암호화하여 암호 블록을 생산함
- 한 평문 블록의 오류가 다른 평문 블록의 암호 결과에 영향을 미치는 오류 전이(Error Propagation)가 발생하지 않음
- 가장 단순한 모드. 평문을 일정한 블록단위로 순차적으로 암호화하는 구조
ⓑ CBC (Cipher Blokk Chaining)
- 암호문 블록을 체인처럼 연결, ECB 모드의 약점 회피, 각 평문 블록을 이전 암호문 블록과 XOR한 후 암호화 되어 안정성을 높이는 모드
- 현재의 평문 블록과 바로 직전의 암호 블록을 XOR한 후 그 결과를 키로 암호화하여 암호 블록을 생성
- IV는 초기화 벡터로 처음에 아무것도 없을 때 난수를 통해 값을 산출해 대입, 처음에만 필요하고 다음 단계에서는 필요 없다
- 초기화 벡터(IV : Initialization Vectgor) : 블록암호 알고리즘에서 최초의 평문 블록을 암호화할 때는 '한 단계 앞의 암호문 블록'이 존재하지 않으므로 '한 단계 앞의 암호문 블록'을 대신할 비트열
- 초기화 벡터는 제3자로부터 예측이 불가능해야 한다
* 암호문에 문제가 있는 경우엔?
- CBC 모드에서는 한 단계 전에 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR하고 나서 암호화를 수행한다. 따라서 생성되는 각각의 암호문 블록은 현재 평문 블록뿐만 아니라 그 이전의 평문 블록들의 영향도 받게 된다
ⓒ CFB (Cipher Feedback)
- 암호 피드백 모드
- 한 단계 앞의 암호문 블록을 암호 알고리즘의 입력으로 사용한다
- CFB모드를 이용하면 어떤 블록암호도 스트림 암호로 바꿀 수 있음
- CFB, OFB, CTR의 공통점은 n비트 블록에서 r비트 단위로 스트림 암호화가 가능하다는 점이다
- CFB모드에서는 1개 앞의 암호문 블록이 암호 알고리즘으로 입력됨. 즉, 암호문 블록을 암호 알고리즘으로 피드백한 것
- 최초의 암호문 블록을 만들어낼 때는 1단계 앞의 출력이 존재하지 않으므로 초기화 벡터(IV)를 사용한다
* 복호화 과정에서도 초기벡터를 복호화 하는 것이 아니라 암호화를 진행한다.
ⓓ OFB (Output Feedback Mode)
- 암호 알고리즘의 출력을 암호 알고리즘의 입력으로 사용한다
- 평문 블록은 암호 알고리즘에 의해 직접 암호화되고 있는 것은 아니다
- 평문 블록과 암호 알고리즘의 출력을 XOR해서 암호문 블록을 생성한다
- 한 평문 블록의 오류가 다른 평문 블록의 암호 결과에 영향을 미치는 오류 전이(Error Propagation)가 발생하지 않는다
-전송 중의 비트 오류가 전파되지 않는 동기식 스트림 암호이다
- '한 단계 앞의 암호 알고리즘의 출력을 암호화한 값'과 '평문 블록'을 XOR 연산하여 암호문 블록을 생성하는 운영모드
- 암호화와 복호화가 같은 구조
- 비트 단위의 에러가 있는 암호문을 복호화하면, 평문에 대응하는 비트에만 에러가 발생
ⓔ CTR (Counter Mode)
- 1씩 증가해 가는 카운터를 암호화 해서 키 스트림을 만들어 내는 스트림 암호
- 각 평문 블록별로 증가하는 서로 다른 카운터 값을 키로 암호화하고 평문 블록과 XOR하여 암호 블록을 생성한다
- 블록암호를 스트림 암호로 바꾸는 구조를 가짐
- 카운터 방식에서는 각 블록마다 현재 블록이 몇 번째인지 값을 얻어, 그 숫자와 nonce라는 임의 값을 결합하여 블록암호의 입력으로 사용함. 각 블록암호에서 연속적인 난수를 얻은 다음 암호화하려는 문자열과 XOR함
■ 블록암호 공격
- 차분공격 (Differental Crptanalysis) : 1990년 Biham과 Shamir에 의하여 개발된 선택된 평문공격법, 두 개의 평문 블록들의 비트 차이에 대하여 대응되는 암호문 블록들의 비트 차이를 이용ㅎ여 사용된 암호열쇠를 찾아내는 방법
- 선형공격 (Linear Cryptanalysis) : 1993년 Matsui에 의해 개발되어 알려진 평문 공격법으로, 알고리즘 내부의 비선형 구조를 적당히 선형화시켜 열쇠를 찾는 방법
- 전수공격법 (Exhaustive Key Search = 무차별 공격(Brute Force)) : 1977년 Diffie와 Hellman이 제안한 방법으로 암호화할 때 일어날 수 있는 모든 가능한 경우에 대하여 조사하는 방법으로 경우의 수가 적을 때는 가장 정확한 방법이지만, 일반적으로 경우의 수가 많은 경우에는 실현 불가능한 방법
- 통계적 분석 (Statistical Analysis) : 암호문에 대한 평문의 각 단어의 빈도에 관한 자료를 포함하는 지금까지 알려진 모든 통계적인 자료를 이용하여 해독하는 방법
- 수학적 분석 (Mathematical Analysis) : 통계적인 방법을 포함하며 수학적 이론을 이용하여 해독하는 방법
'정보보호론 > 보안과 암호' 카테고리의 다른 글
대칭키와 공개키 비교 (0) | 2020.09.10 |
---|---|
공개키(비대칭키) 암호시스템 (0) | 2020.09.10 |
대칭키 암호 시스템 (0) | 2020.09.08 |
해커의 암호공격 방법 (0) | 2020.09.08 |
암호학의 이해 (0) | 2020.09.03 |