Post

암호 정리 (Incomplete)

암호 기법의 분류



image

출처 : [YJUN IT BLOG]






치환암호



참고 : blog.naver.com/wnrjsxo/221704381990






Caesar Cipher (seizure cipher)



  • monoalphabetic cipher(단일문자 치환 암호)

    • 간단한 치환암호.

    • 평문의 알파벳들을 각각 일정한 거리만큼 떨어진 다른 알파벳으로 치환.


image






Vigenere Cipher (polyalphabetic cipher)



다중문자 치환 암호
ko.wikipedia.org/wiki/비즈네르_암호


image


image






대칭 암호



대칭 암호는 암호화와 복호화에 동일한 키를 사용한다.

이 방식은 비대칭 암호 방식보다 암호화/복호화 속도가 빠르기는 하지만 키 분배를 안전하게 하는 게 가장 어렵다.


크게 블록 암호와 스트림 암호로 나뉜다.

블록 암호는 고정 크기의 블록 단위로 작업을 수행한다. 이 방식에서는 동일한 키를 사용했을 경우 한 평문 블록이 항상 같은 암호 블록으로 암호화된다.

DES, Blowfish, AES(Rijndael)가 있다.


스트림 암호는 한 번에 1비트나 1바이트씩 임의의 비트 스트림을 만들어낸다. 이것을 키스트림이라 하는데, 키 스트림ㄹ은 평문과 XOR된다.

이 방식은 연속적인 데이터 스트림을 암호화하는 데 유용하다.

RC4, LSFR이 있다.



블록 암호



블록 암호 방식에서 가장 많이 이용되는 개념에는 혼돈과 확산이 있다.

혼동
평문, 암호문, 키 사이의 관계를 감추려고 사용하는 방법을 의미한다.


확산
평문 비트와 키 비트가 가능한 한 많은 암호문에 영향을 주게 함을 의미한다.


혼합 암호는 여러 단순 연산을 반복해 이 두 가지 개념을 모두 구현한 방식이다. DES와 AES 모두 혼합 암호 방식이다.






DES

구조



image


  • Block암호(Feistel 구조), 대칭암호

    • Plaintext : 64bit

    • Ciphertext : 64bit

    • Encrypt Key : 64bit -> remove parity bit (8) -> 56bit -> key schedule -> 48 bit


  • 과정

    1. 64 bit의 평문을 IP(initial permutation, 초기치환)을 해줌.

    2. IP 후 64bit 평문을 32bit씩 L, R로 나눔.

    3. R0를 키 스케줄을 통해 나온 48bit 암호키와 같이 F함수에 들어감. -> 32 bit 생성

    4. L0와 F함수에서 만든 32bit와 XOR연산

    5. 4에서 나온 결과 값은 R1으로, R0은 그대로 L1으로 이동

    6. 위 과정을 16라운드 동안 해주고 마지막 라운드에서는 L, R 위치 변경

    7. 다시 inverse permutation을 해주면 암호문 64bit 생성



IP(Initial Permutation) table



image



F함수



image


  • 과정

    1. R 32bit를 Expansion 해주어서 48bit로 Expansion

    2. Expansion R(48bit)와 48bit 암호키 XOR 연산

    3. 2의 결과 값 48bit를 8개의 S-box에 6bit씩 넣어줌.

    4. S-box에서 규칙에 따라 4bit씩 생성 -> 8*4 = 32bit 생성

    5. 32bit를 다시 치환

    6. 32bit F함수 결과값 생성



Expansion Permutation table



image



S-Box



  • S-Box 규칙

    1. 맨 앞, 뒤 비트를 묶어서 행을 결정 (0~3)

    2. 나머지 4비트를 묶어 열을 결정 (0~15)


예를 들어, S-Box 1에 100110이 들어왔다하면

  1. 10 -> 2 (행)
  2. 0011 -> 3 (열)

-> S-box 1의 2행 3열 값 8

-> 8을 다시 2진수로 바꾸면 1000 -> 6bit가 4bit로 변경됨.


image



키 스케줄



image


  • 과정

    1. 64bit의 암호키를 PC-1 전치해줌. -> parity bit 제거(8, 16, 24, 32, 40, 48, 56, 64)

    2. 56bit의 키를 Left, Right로 나눠주고 Shift table에 따라 이동

    3. PC-2에서 LR을 합쳐 다시 전치 -> 48bit 키 생성



PC-1, PC-2



PC1


PC2



Shift table



image






AES



Not yet






RSA



공개키 {n, e}가 있고 개인키 {p, q}가 있음.


  • RSA 암호화 알고리즘

    • 서로 다른 소수 p, q를 정한 뒤 n, φ(n), e, d를 구한다.

      • n = p * q

      • φ(n)=(p-1)(q-1)

      • e : gcd(e, φ(n)) = 1, 1 < e < φ(n)인 e를 정한다.

      • d : ed=1 mod (φ(n)), 즉 φ(n)에 대한 e의 역원을 구한다. 1 < d < φ(n)

    • C : Ciphertext, M : Plaintext

      • encrypt : C ≡ M^e mod (n)

      • decrypt : M ≡ C^d mod (n)


tool을 이용하여 {p, q}를 구할 수 있음.






참고



Link
crocus.co.kr/3410
bpsecblog.wordpress.com/amalmot/






This post is licensed under CC BY 4.0 by the author.