RavenSong's CS log

암호화 알고리즘 종류 및 작동방식 본문

암호학

암호화 알고리즘 종류 및 작동방식

RavenS0ng 2024. 4. 8. 22:21

 

Block Cypher
  • 대칭키 암호화 방식
  • 평문을 일정한 길이의 블록으로 나누어 암호화 하는 방식
  • S/W 구현이 쉬움
  • Round를 사용하여 반복적으로 암호화하므로 안전함
  • DES, AES 등
  • Block Size, Key Size, Round Size, Function 복잡도 = 크면 안전하나, 느려진다

 

Feistel Cypher 구조
  • 대부분 Block Cypher에 사용
  • 입력 블록을 반으로 나눈 후 왼쪽, 오른쪽을 바꾸어가며 여러 Round를 수행

https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%8A%A4%ED%85%94_%EC%95%94%ED%98%B8

 

 

DES, AES

 

DES

  • 1972년 NIST Cypher 공모
  • 1974년 IBM Lucifer 선정
  • 1977년 미정부에서 사용 결정
  • Block Size: 64bit
  • Key Size: 56bit
  • 16Round

AES

  • 1997년 NIST 공모
  • Block Size: 128bit
  • Key Size: 128, 192, 256bit
  • 각 키 크기에 따라 10,12,14 Round 수행

적은 처리 능력으로도 빠르게 데이터를 암호화하고 복호화가 가능

-> 온라인 거래 및 보안 통신과 같이 실시간 암호화 및 복호화가 필요한 어플리케이션에 적합함

 

 

ECB(Electronic Code Block)
  • 각 Block이 서로 독립적(단순하고 병렬처리에 용이)
  • 같은 평문에 대해 동일한 암호문 생성이 단점

https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8_%EC%9A%B4%EC%9A%A9_%EB%B0%A9%EC%8B%9D

 

 

CBC(Cypher Block Chaining)
  • Chain(뒤에 것을 앞에 연결), 최초의 평문 블록 XOR후 결과는 다음 평문 블록과 XOR해서 암호화
  • 같은 평문 블록이라도 다음 암호문 블록 생성이 되나, 에러 발생 시 잘못된 정보를 생성하게 됨
  • IPSEC, Kerberos5 등에 사용

https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8_%EC%9A%B4%EC%9A%A9_%EB%B0%A9%EC%8B%9D

 

 

CFB(Cypher Feed Back)
  • FeedBack(출력을 입력으로 초기 블록을 암호화하여 결과를 평문 블록과 XOR)
  • 결과는 다음 Encrypt시에 입력으로 사용
  • 평문을 직접 암호화하는 것이 아님
  • 같은 평문 블록이라도 다른 cypher 블록 생성
  • error 발생 시 계속 잘못된 정보가 생성

https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8_%EC%9A%B4%EC%9A%A9_%EB%B0%A9%EC%8B%9D

 

 

OFB(Output Feed Back)
  • 장단점은 CFB와 동일
  • CFB에 비해 빠름

https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8_%EC%9A%B4%EC%9A%A9_%EB%B0%A9%EC%8B%9D

 

 

Stream Cypher 
  • 대칭키 암호화 방식
  • Block을 만들 수 없는 경우, 평문을 1bit(or byte, word)씩 순차적으로 암호화하는 방식
  • 평문과 난수 키 스트림을 bit씩 단순 XOR(연산이 빠름)
  • 일반적으로 Block Cypher에 비해 보안성이 낮음
  • 무선통신, 실시간 음성, 영상 스트림 서비스에 적합
  • RC4, ChCha, SEAL, SOBER 등

http://wiki.hash.kr/index.php/%EC%8A%A4%ED%8A%B8%EB%A6%BC_%EC%95%94%ED%98%B8

 

 

RSA
  • 공개키 암호화 방식
  • 인수분해를 바탕으로 둔 암호화 알고리즘
  • MIT에서 1978년 발표 (3명 공동개발)
  • 가장 널리 사용(공인인증서 등)
  • Key Size: 1024~4096bits
  • DES가 S/W적으로 100배 빠르고, H/W적으로는 1만배 빠름
  • Hacker가 공개키 및 암호문을 쉽게 얻더라도 비밀키를 얻으려면 공개키를 인수분해해서 값을 구해야 하는데, 큰수에 대한 인수분해는 매우 많은 수행시간을 요구함
  • 현재 사용되는 250자리 RSA암호는 복호화하는데 우주의 나이만큼 걸림

 

 

Hash
  • 임의의 길이의 데이터를 고정된 길이의 값이나 키로 변환하는 함수

https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98

 

Hash 함수는 암호문을 보고 평문을 유추하는 것이 불가능함

why? -> 위 사진 네 평문은 길이가 다르지만 Hash 결과는 모두 같음 또한 첫째와 둘째 평문은 단어 하나만 다를 뿐인데 Hash 결과가 완전히 다름

 

 

Hash함수 문제점
  • MD5는 Hash 함수 중 하나로 현재는 안전하지 않다고 여겨짐

1. 약한 충돌저항성: 서로 다른 입력 값에 대해 동일한 Hash 출력이 생성됨

 

2. 암호학적 해석상의 취약성: Collision 공격 (Hash 충돌을 찾아내는 공격)

 

3. 보안 관련 취약점: 보안 어플리케이션에 적합하지 않아 현재는 SHA-256 또는 SHA-3 같은 안전한 해시 알고리즘을 권장함 (무작위성 상승)