암호
1. 암호문 단독 공격 (COA : Ciphertext Only Attack)
어떤 암호문을 얻어서 대응되는 평문과 키를 찾는 것
(통계적 성질, 문장의 특성 등을 추정하여 해독)
2. 기지 평문 공격 (KPA : Known Plaintext Attack) 알려진
해독하려는 암호문 외에 추가로 여러 평문/암호화 쌍을 수집해놓고 분석
일정량의 평문에 대응하는 암호문을 알고 있는 상태에서 해독하는 방법
3. 선택 평문 공격 (CPA : Chosen Plaintext Attack)
어떤 평문을 선택하고 이에 대응되는 암호문을 얻는다.
(평문을 선택하면 대응하는 암호문을 얻을 수 있는 상황에서의 공격)
4. 선택 암호문 공격 (CCA : Chosen Ciphertext Attack)
어떤 암호문을 선택하고 그에 대응되는 평문을 얻는 공격 (방법은 CPA와 비슷)
*암호 안전성 평가 CC(Common Criteria) : 암호알고리즘에 대한 평가는 하지 않는다.
*암호모듈에 대한 안정성 평가 CMVP(Cryptographic Module Validation Program)
*암호알고리즘 평가와 암호모듈 평가는 다르다
1. 페이스텔 암호 (DES, SEED)
평문 블록의 길이(64bit이상), 키의 길이(64bit 내외), 라운드의 수(16회 이상)로 암호 강도를 결정 짓는다.
*복호화 과정은 암호화 과정과 동일하다 (효율성 높음)
L(i) = R(i-1)
R(i) = L(i-1) XOR F(i)( R(i-1), K(i) )
2. SPN(Substitution-Permutation Network) 구조 (AES, ARIA, SHARK, SAFER)
입력을 여러 개의 소블록으로 나누고 각 소블록을 S-box로 입력하여 대치(substitution)시키고 S-box의 출력을 P-box로 치환(permutation)하는 과정을 반복
*병렬처리가 가능하지만 별도의 복호화 모듈이 필요하다.
-DES (Data Encryption Standard) – Feistel 네트워크의 변형된 형태
평문의 길이는 64bit, 키의 길이는 56bit, 라운드 16회
56bit키로부터 16개의 서브키를 생성하고 그 서브키(48bit)를 각 라운드에서 사용
복호화시 서브키 K(i)를 뒤집어서 적용 *(복호화 시 첫 번째는 K(16)키를 사용)
P박스(초기 전치) – Round1 – Round2 – Round3 - …. - Round16 - P박스(최종 전치)
각 라운드는 Feistel구조로 64비를 32bit씩 L, R로 나누어 진행
*S박스는 비선형으로 구현 à 입력값의 한 비트를 바꾼다면 출력값에서는 두 비트
이상이 바뀜 (혼돈을 만족)
*P박스 확산(diffusuin) 시킴
*3중 DES (두 개 키사용) à 암K1-복K2-암K1 = C=E(D(E(P, K1), K2), K1)
(3개 키 사용) à 암K1-복K2-암K3 복호화 과정è 암호문à복K3-암K2-복K1à평문
-AES (Advanced Encryption Standard) non-Feistel 알고리즘 Rijndael이 표준(SPN)
128비트 평문을 128비트 암호문으로 출력하는 알고리즘
키사이즈 : 128/192/256bit (라운드 10, 12, 14) 선택 가능, 라운드키는 128비트
키 크기에 따라 AES-128 이런식으로 부름
(1). 비선형성을 갖는 S-BOX를 적용 바이트 단위로 치환을 수행하는 SubBytes()연산
행 단위로 순환 시프트를 수행하는 ShiftRows()연산, 높은 확산을 제공하기 위해 열 단위로 혼합하는 MixColumns()연산, 마지막으로 라운드 키와 state를 EX-OR하는
AddRoundKey()연산으로 구성
'IT 코딩' 카테고리의 다른 글
OWASP (0) | 2020.11.20 |
---|---|
자료형 (0) | 2020.11.19 |
시스템 프로그래밍 정리 (0) | 2020.11.17 |
리눅스 정리 (0) | 2020.11.16 |
객체지향, 상속, 생성자 (0) | 2020.11.15 |
댓글