티스토리 뷰
대칭 암호 == 관용 암호 == 비밀-키 암호 == 단일-키 암호는 다 같은 말이다.
대칭 암호 알고리즘으로 DES
, 3DES
, AES
가 있다.
대칭 암호 요소
- 평문: 원문 데이터
- 암호 알고리즘: 원문 데이터를 변환하는 알고리즘
- 비밀 키: 알고리즘의 입력으로 사용되며 암호 알고리즘의 키
- 암호문: 암호화된 메시지
- 복호 알고리즘: 암호화된 메시지를 역으로 평문으로 만든다.
대칭 키 필수 사항
- 강한 알고리즘: 암호문/평문을 알고 있더라도 키를 알아내지 못하도록 알고리즘이 강력해야 한다.
- 송신자와 수신자가 공유하는 키는 분배 방법이 중요하다.
보안은 키의 비밀성의 의해 지켜진다. 암호화 알고리즘은 공개되어 있다.
보안의 핵심은 키를 얼마나 잘 보호하는지에 달려있다.
암호
암호화는 3개의 단계로 이루어진다.
- 평문을 암호문으로 전환하는 유형: 대체, 치환, 생성 시스템
- 사용되는 키의 수: 송수신자가 같은 키를 사용하면
대칭 암호
, 다른 키를 사용하면비대칭 암호
라고 한다. - 평문 처리 방법: 블록 암호(한번에 한 블록씩), 스트림 암호(입력 요소를 연속적 처리)
암호해독
암호문을 통해 평문이나 키를 찾으려고 하는 시도를 암호해독
이라고 한다.
- 암호문만 주어졌을 때
- 공격자가 소지한 정보가 제일 빈약한 경우
- 알려진 평문 공격
- 항상 특정한 패턴으로 암호화가 되는 경우 암호문과 평문을 가지고 키를 유추할 수 있다.
암호구조가 계산적으로 안전한 경우
- 암호 해독 비용이 암호화된 정보보다 큰 경우
- 암호 해독 시간이 암호화된 정보의 유효기간보다 큰 경우
전수 공격
모든 가능한 키를 이용하여 암호문으로부터 의미 있는 평문을 얻어낼때까지 시도하는 방법, 브루트포스 방법이라고도 한다.
전수공격을 한다고해도 평문이 의미있는 평문인지 구별해내는 기술이 필요하다.
페이스텔 암호 구조
암호 알고리즘 입력 요소 : 평문 블록, 키
길이가 2w인 블록으로 나누어 LE, RE로 w의 크기만큼 나눈다.
각 라운드는 전 라운드의 과정으로 생성된 서브키를 이용하여 생성 알고리즘을 구성한다.
과정
- 왼쪽 데이터 LE 대체를 수행한다.
- 오른쪽 데이터 RE에 대해 라운드 함수를 적용하고 왼쪽 반에 XOR 연산을 시행한다.
- 왼쪽 LE와 오른쪽 RE를 치환한다.
블록 길이: 블록 길이는 길 수록 보안이 좋아지지만 연산 시간이 길어진다. 페이스텔 암호 구조에서 블록길이는 64bit이다.
키 길이: 키 길이 역시 길수록 보안이 좋지만 연산 시간이 길어진다. 여기선 128bit 키를 사용한다.
라운드 수: 라운드 수는 가변적이며 여러번 수행할수록 보안이 좋아진다. 여기선 16번의 라운드를 사용한다.
서브키 생성 알고리즘/라운드 함수: 복잡할수록 보안이 강해진다.
대칭암호 설계 고려사항
- 빠른 소프트웨어 암호/복호 알고리즘
- 용이한 해독: 알고리즘의 구조가 단순할 수록 해독 취약점을 찾기 쉬워지며 보안을 강화할 수 있다.
대칭암호 알고리즘
DES: Data Encryption Standard
블록의 길이는 64bit, 키 길이는 56bit, 라운드 횟수 16
DES 취약점
- 알고리즘의 문제: 하드웨어 발전에 따라 DES를 전수공격을 시도하면 키를 찾아낼 수 있음을 증명
- 키 길이: 56bit의 키를 사용하기에 뚤릴 수 있다. DES Cracker가 생긴 뒤 키 길이를 늘리고자 한다.
3DES: Triple Data Encryption Standard
3개의 키를 사용하며 DES를 3번 수행한다.
암호문은 암호화-복호화-암호화를 수행한다.
3DES는 서로 다른 3개의 키를 사용하기에 56bit * 3 = 168bit의 키 길이를 갖는다.
AES: Advanced Encryption Standard
3DES의 소프트웨어 구현속도가 느리며 64bit 단위의 블록을 사용함으로써 약점을 나타냈다. 이는 하드웨어의 발전으로 더 큰 블록사이즈를 사용하는 것이 바람직 해지게 되었다.
Rijndael 레인달
블록의 길이 128bit, 키 길이 128/192/256 bit
레인달은 페이스탈 구조가 아니다.
만약 128비트의 키를 사용한다고 가정하면 16byte의 키를 총 4개의 word로 표현할 수 있다. (1 byte = 8bit, 1 word = 4byte)
키를 44word로 확장한다. 4개씩 총 11개의 워드 배열이 존재하며, 첫번째 워드는 평문에 더한다.
워드 배열은 라운드 키 더하는 과정 중에 사용되며 총 10번의 라운드를 진행한다.
라운드 키 더하기(확장된 키) -> 바이트 대체 -> 행 이동 -> 열 섞기 -> 라운드 키 더하기(확장된 키) 반복
난수
- 무작위 성
- 균등 분포: 수열의 비트 분포가 균일해야 함.
- 독립성: 어떤 부분도 다른 부분으로부터 예측할 수 없어야 함.
- 예측 불가능성
- 무작위 성을 갖는 난수를 생성하는 방법이 너무 어렵거나 시간이 오래걸리는 문제가 생기기에 정교한 무작위성 대신 일부를 통해 이어지는 부분을 예측할 수 없는 특성을 의미한다.
진성난수(True random number): 예측이 불가능하며 모든 수가 독립적이다.
하지만 암호분야에서 알고리즘에 기초해서 난수를 만들기에 무작위성을 갖지 못하는 수열을 생성해내게 된다.
알고리즘을 잘 만들어 생성된 수열을 의사난수(pseudorandom number)이라고 하는데 정확히 진성난수는 아니지만 어떤 상황에서는 진성난수처럼 작동한다.
- TRNG: True Random Number Generator
- PRNG: Pseudo Random Number Generator: 시드가 같으면 같은 결과값이 나온다.
- PRF : Pseudo Random Fuction: PRNG에 컨텍스트별 값을 추가하여 랜덤성을 부여한다.
PRNG
의사난수 비트 스트림을 생성하기 위해 생성된 알고리즘이며, 대표적으로 RC4가 있다.
범주: 대칭 블록 암호, 비대칭 암호, 해시함수, 메시지 인증 코드(MAC)
블록 암호는 입력되는 하나의 블록씩 처리하여 그에 대한 처리된 블록을 만든다.
스트림 암호는 입력되는 요소를 연속적으로 처리하여 한 요소씩 배출한다.
스트림 암호 중 하나인 RC4는 대칭 스트림 암호 알고리즘
중 하나이다.
전형적으로 스트림 암호는 입력을 하나의 바이트로 받는다.
의사난수 비트 생성기는 키를 입력으로 받는데 입력 스트림과 키 스트림과 XOR 연산을 하여 암호문을 만든다.
스트링 암호 설계시 중요 사항
- 암호열은 주기가 커야한다. 주기가 길수록 해독하기 어려워진다.
- 키 스트림은 반드시 진성 난수 스트림에 근사하도록 한다.
- 브루트 포스 알고리즘을 차단하기 위해 키의 길이가 충분히 길어야 한다. 현재 키길이는 최소 128bit 이상이다.
- 스트링 암호는 동등한 길이의 기를 사용할 때 블록 암호만큼의 보안성을 유지한다.
- 스트림 암호는 블록 암호보다 구현속도가 빠르다.
RC4
스트림 암호이며 SSL/TLS 표준, WEP, WPA 프로토콜에서 사용된다.
암호블록 모드
대칭 암호 블록은 입력을 하나의 블록으로 받는데 DES, 3DES의 경우 64bits, AES의 경우 128bit의 블록을 입력으로 받는다.
- 전자 코드북 모드: ECB
- 각 블록을 동일한 키로 암호화 하며 각각의 블록이 하나의 암호블록에 대응되기에 코드북이라고 명칭
- 대응되는 관계이기에 쉽게 해독될 가능성이 있다.
- 암호 블록 체인모드: CBC
- 현재 평문 블록과 직전 암호 블록을 XOR 연산하여 알고리즘 입력으로 받는다.
- 첫번째 암호블록에 대해 초기화벡터를 만들어 첫번째 평문 블록과 XOR연산을 통해 첫단계를 해결한다.
- 암호 피드백 모드: CFB
- 어떠한 블록암호도 스트림 암호로 변경할 수 있다는 특징이 있으며 s bit를 선택하여 평문 블록과 XOR 연산하여 암호문을 생성한다.
4. 카운터 모드: CTR
- 평문블록과 동일한 크기의 카운터를 이용한다.
- 병렬적으로 처리하기에 하드웨어/소프트웨어 효율성이 높아진다.
- 임의접근
- 복호 알고리즘은 필요 없다.
'📚 컴퓨터사이언스 > Network' 카테고리의 다른 글
네트워크 보안 개요 (0) | 2023.04.13 |
---|