Replicated

암호 - 난수, 비밀키, 공개키, 블록, 스트림 본문

소프트웨어 보안개발방법론

암호 - 난수, 비밀키, 공개키, 블록, 스트림

라구넹 2025. 4. 18. 18:59

고대 암호

- 노예 머리에 문신, 스키테일 암호, 시저 암호

- 시저 암호는 가장 많이 나타나는 문자를 모음에 대조시키면 깨지고, 치환 암호라고도 함

 

현대 암호

Kerckhoffs 원리

- 암호의 안전성은 알고리즘이 아니라 키의 안정성에만 의존

- 키를 제외한 시스템의 모든 내용이 노출되어도 암호 체계는 안전해야 함

 

현대 암호 시스템 주요 기능

기밀성(Confidentiality)

- 비밀키, 공개키 암호

 

무결성(Confidentiality)

- 암호학적 해시 함수

- MAC (Message Authentication Code)

- 전자 서명

 

인증(Authentication)

- 개체 인증

- 메시지 인증

 

부인 방지(Non-Repudiation)

- 전자 서명

- 공인인증 시스템

 

기타

- 난수

 


 

난수(Random number)

- 예측 불가능성: 생성된 난수로 다음 난수 예측 불가

- 무작위성: 생성된 난수는 통계적으로 균일한 분포, 패턴을 가지지 않음

- 재현 불가능성: 동일 난수를 생성할 수 없어야 함

 

사용분야

- 암호화 키, 인증 토큰 생성

- 보안 파라미터 생성

 

종류

Pesudo Random Number Generator (PTNG)

- Seed 입력 값으로 알고리즘 생성

- 해시함수 기반(Hash DRBG/HMAC_DRBG), 블록암호 기반(CTR_DRBG)

 

True Random Number Generator (TRNG)

- 물리적 현상 기반, 전자회로 기반

- QRNG(Quantom Random Number Generator)

 


 

비밀키(대칭키) 암호 vs 공개키(비대칭키) 암호

- 대칭키 암호는 암복호화 사용키 동일 -> 참여자 간 안전하게 비밀키를 공유 및 관리

- 공개키 암호는 암호화와 복호화 키 상이 -> 개인키, 공개키를 생성하여 공개키를 참여자에게 공유

 

비밀키(대칭키) 암호

- 참여자 n명, 개인이 관리해야 할 키 개수 n-1

- 전체 키 개수 n(n-1) / 2 개

 

공개키(비대칭키) 암호

- 참여자가 n명일 때 개인이 관리해야 할 키는 자신의 개인키 1개

- 상대방의 공개키는 공개되어 있어서 관리할 필요가 없음

 


 

스트림(Stream) 암호화 블록(Block) 암호

스트림 암호

- Bit 또는 Byte 단위로 데이터를 순차적으로 처리

- 키와 평문에 대한 XOR 연산

- 1비트 오류 -> 해당 비트에만 영향

- 빠른 성능이 필요한 데이터에 대한 실시간 보호

- 블록 암호에 비해 사용 빈도가 떨어짐

    - 표준화 부재

    - 보안 취약점: 키 스트림 관리, 인증 매커니즘 부족

    - 유연성 부재: 블록 암호는 다양한 모드 제공(스트림 암호와 유사하게 가능)

    - 근데 요즘 ChaCha20 많이 쓰는듯? TLS 표준에도 들어갔음

 

블록 암호

- 정해진 크기의 블록 단위로 데이터를 처리

- 키와 평문을 이용한 치환과 순열 변환을 반복 수행

- 상대적으로 느린 연산 속도

- 1비트 오류는 해당 블록에 영향 (모드따라 다름)

- 대부분의 데이터 암호화에 사용