-
대칭 암호 알고리즘school(3)/crypto protocol 2021. 4. 2. 15:52
학교 PPT 참고
대칭 암호의 필수 조건
●대칭암호의 필수 요건
▶강한 암호 알고리즘
▶안전한 비밀키 공유
- 대칭 암호의 보안은 키의 비밀성에 의해서 지켜지는 것이지 알고리즘을 모르게 해서 지켜지는 것이 아니다(커코프 원칙)
●암호
▶평문을 암호문으로 전환하는 연산 유형
-대체 : 값을 다른 것으로 바꾸는 것 (Substitution)
-치환 : 요소의 순서를 재 조정 하는 것 (Transposition)
▶사용되는 키의 수
-단일 키
-쌍키
▶평문 처리 방법
-블록 암호
-스트림 암호
- 블록 함수의 구조
블록함수 구조 spn구조 - Feistel 암호 구조 (암호화)
- Feistel 암호 구조 (복호화)
- 대칭블록암호 설계요소
- 블록크기
- 키 크기
- 서브키 생성 알고리즘
- 라운드 함수
- 바른 소프트웨어 암호/복호
- 용이한 해독
대칭암호 알고리즘 예
- 대칭 암호 알고리즘
- DES
- 3중 DES
- AES
- DES
- 평문의 길이: 64비트
- 키의 길이 : 64비트
- 구조 : Feistal 네트워크의 변형
- 라운드 수 : 16
- 서브키 : 원해키로부터 16개의 48비트 서브키 생성, 각 라운드에서 사용
- DES의 강도
- 키 길이의 취약성
- DES Cracker
- 더 이상 사용하지 않
- 3중 DES
- 세 개의 키를 사용해 DES 알고리즘을 세 번 수행한다
- 임호 - 복호 -암호(EDE => encrypt - decrypt - encrypt)순서로 수행
- 암호화
- C = E(K3 , D(K2, E(K1,P)))
- C = 암호문
- P = 평문
- E[K,X] = 키 K를 이횽해서 X를 암호화
- D[K,Y] = 키 K를 이용해서 Y를 복호화
- C = E(K3 , D(K2, E(K1,P)))
- 복호화
- P = D(K1, E(K2,D(K3MC)))
- 호환성
- C = E(K1 ,D(K1 ,E(K1 ,P))) = E(K,P)
- AES
- 3DES가 속도가 느리다
- 장기적 표준으로 부적합
- NIST는 1997년에 3DES와 같거나 더 나은 강력한 보안성을 갖고 월등히 개선된 효율 적인 새로운 AES(Advanced Encryption Standard)를 공모
- AES 선발 조건
- 블록 길이가 128비트인 대칭 블록 암호화
- 키의 길이는 128 192 256 비트를 지원
- 평가 항목
- 보안
- 계산적 효율성
- 메모리 요구량
- 하드웨어와 소프트웨어적 적합성
- 유연성
- 레인달 (Rijndael)
- 1차 심사 : 15개 선정
- 2차 심사 : 5개 선정
- 최종 선정
- 레인달
- NIST에서
- 개발자 : 벨기에 암호학자
- 요안 대믄
- 빈슨트 레이믄
- 레인달
- AES 알고리즘 개요
- AES는 Feistal구조가 아님(SPN 구조)
- 각 라운드에서 대치와 치환을 이용 데이터 블록 전체를 병렬 처리
- 4가지 연산
- 바이트 대체 (Substitute bytes)
- 행 이동 (Shift rows)
- 열 석기 (Mix columns)
- 라운드 키 더하기 (Add round key)
AES 암호화 복호화 AES 암호화 라운드 스트림 암호
스트림 암호화 RC4
스트림 암호 구조 스트림 암호 다이어그램 - 스트림 암호 설계시 주의사항
- 주기가 긴 암호열
- 진성랜덤넘버 특성에 근사한 키 스트림
- 충분히 긴 키의 길이
펜티엄 2에서 대칭암호 속도 비교 - RC4
- 론 리베스트가 1987년에 RSA Security에서 설계한 스트림 암호
- 바이트 단위로 작동
- 다양한 크기의 키 사용
- 랜텀 치환 기법 사용
- 응용
- SSL/TSL
- WEP
- WPA
초기화 복호화 - RC4의 강도
- RC4에 대한 실제적 공격 어려움
- RC4에 입력으로 사용되는 키의 생성 방법에 문제
암호 블록 운용 모드
- 5가지 운용 모드
- ECB
- 가장 단순한 모드로 블록단위로 순차적으로 암호화 하는 구조
- 한개의 블록만 해독되면 나머지 블록도 해독되는 단점
- 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 할기 위해서 Padding을 해야댐
- error propagation : 각 블록이 독립적으로 동작하므로 한블록에서 에러가 난다고 해도 다른 블록에 영향을 주지 않음, 해당 블록까지 에러 전파
- CBC
- 블록 암호화 운영 모드 중 보안성이 제일 높은 암호화 방법으로 가장 많이 사용
- 평문의 각 블록은 XOR연산을 통해 이전 암호문과 연산되고 첫번쨰 암호문에 대해서는 IV가 암호문 대신 사용, 이 때 IV는 제 2의 키가 될 수 있음
- 암호문이 블록의 배수가 되기 떄문에 복호화 후 평문을 얻기 위해서 Padding을 해야함
- 암호화가 병렬처리가 아닌 순차적으로 수행되어야 함.
- error propagation : 깨진 암호문의 해당블록과 다음블록의 평문까지 영향을 끼침
- CFB
- 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같음 (패딩이 필요 없음)
- 최초의 키 생성 버퍼로 IV가 사용되며 , 이때 IV는 제 2의 키가 될 수있음
- 스트림의 기본단위 bit단위로 설정할 수 있으며, bit단위에 따라 CFB8~CFB128로 쓰임
- 암호화 복호화 모두 암호화로만 처리할 수 있음
- CBC모드와 마찬가지로 암화는 순차적이고, 복호화는 병렬적으로 처리할 수 있음
- error propagation : CBC모드와 마찬가지로 한 암호문블럭의 에러는 해당 평문블록과 다음 평문블록, 이렇게 총 2개의 블록에 전파됨
- OFB
- 블록 암호화를 스트림 암호화처럼 구성에 평문과 암호문의 길이가 같음
- 암호화 하는 키 생성에만 사용되며, 암호화 방법과 복호화 방법이 동일해 암호문을 한번 더 암호화하면 평문이 나옴
- 최초의 키 새성 버퍼로 IV가 사용되며, 이 때 IV는 제2의 키가 될 수있음
- 스트림 기본 단위를 BIT단위로 설정할 수 있으며, BIT단위에 따라 OFB8~OFB128로 쓰임
- error propagation : 해당 블록까지만 대응되는 한 블록에만 영향을 미치므로, 영상이나 음성같은 digitized analog신호에 많이 사용됨
- CTR
- 블록 암호화할 때마다 1씩 증가해 가는 카운터를 암호화 해서 키 스트림을 만듦. 즉 카운터를 암호화한 비트열과 평문블록과의 xor를 취한 결과가 암호문 블록이 됨
- CTR모드는 OFB와 같은 스트림 암호의 일종
- CTR모드의 암호화는 완전히 같은 구조가 되므로 구현이 간단함
- ECB