Replicated

공개키(비대칭키) 암호 - Public Key Cryptography 본문

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

공개키(비대칭키) 암호 - Public Key Cryptography

라구넹 2025. 4. 19. 18:03

배경

- 1970년대 이전 -> 비밀키 암호만 존재

- 비밀키 암호는 키 분배 및 관리 문제 존재

- Diffie-Hellman

    - 1976, 공개키 암호 개념 제안

    - 이산대수 문제

- RSA

    - 1977, Rivest, Shamir, Adelman

    - 소인수분해 문제

 

기본 원리

- 공개키/개인키 쌍 생성하여 사용

- 일방향 함수(One-way function) 사용

 

대표적 활용 분야

- 키 교환 알고리즘

- 전자 서명(부인 방지 기능)

이산대수 기반

주어진 g, x, p를 이용하여 y = g^x mod p를 구하긴 쉽지만, g, y, p 값을 이용하여 원래의 x를 찾기는 어렵다

- Diffie-Hellman

- Elgamal

- ECC

 

소인수분해 기반

매우 큰 두개의 소수를 선택하고 이를 기반으로 공개키와 개인키 생성, 이때 소수의 소인수 분해는 쉽지 않은 계산 문제

- RSA

- Rabin

 

 

Diffie Hellman

공개키 메커니즘을 이용한 키 협상 알고리즘

앨리스와 밥이 두 양의 정수 p, q에 동의

 

앨리스

- private key a 선택

- a* = q^a mod p

 

- private key b 선택

- b* = q^b mod p

 

앨리스-밥 a*, b* 교환

 

공유된 비밀키 계산

앨리스

x = (b*)^a mod p

 

- x = (a*)^b mod p

 

 

RSA

p, q 선택

n = p * q

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

e 선택, gcd(φ(n), e) = 1; 1 < e < φ(n)

d계산, d*e mod φ(n) = 1

public key: KU = {e, n}

private key: KR = {d, n}

 

Encryption

- Plaintext: M   (< n)

- Ciphertext: C = M^e (mod n)

 

Decryption

- Plaintext: C

- Ciphertext: M = C^d (mod n)

 

RSA Encryption

- 상대방의 공개키로 암호화

- 자신의 개인키로 복호화

 

RSA Digital Signature (Non-Repudiation)

- 자신의 개인키로 암호화

- 상대방의 공개키로 복호화

 

 

공개키 알고리즘을 안전하게 사용하려면?

안전한 개인 키 관리

- 비밀번호를 이용한 개인키 암호화 관리(PKCS#8)

    - 패스워드를 이용해 개인키를 암호화하여 저장

- HSM(Hardware Security Module) 활용

    - 키 생성, 저장, 사용까지 모두 HSM에서 처리.. (외부로 개인키 export 불가)

 

안전한 공개 키 배포 및 유효성 검증

- PKI (Public Key Infrastructure)

    - X.509 인증서를 이용한 공개키 배포 및 검증

- DANE (DNS-based Authentication of Named Entities)

    - DNS를 이용, SMTP 보안에 사용됨

- Web of Trust

    - 소규모 그룹에 효과적. PGP, GPG와 함께 이메일 보안에 사용

- Blockchain

    - 분산 원장을 이용, DID(Decentralized Identifer)에 사용됨

- Out of Band

    - 별도 채널을 이용. 높은 보안 요구 시 사용

 

 

PKI(Public Key Infra Structure)

- 공개키 암호 시스템을 위한 인증서 발급 및 관리를 위한 체계

- 인증기관(CA, Certificate Authority), 등록기관(RA, Registration Authority)

- 인증서(Certificate), CRL(Certificate Revocation List, 인증서 유효성), 인증서 저장소 등으로 구성

 

PKI 과정

A와 B가 디지털 시그니처를 이용해 계약. A가 공개키, 개인키를 만들고

공개키와 함께 CSR(Certifacate Signing Request)을 등록 기관에 보냄

등록 기관은 유효성 검증하고 최상위 인증 기관(CA)에 CSR을 보냄.

인증 기관은 인증서를 만들어서 보냄, 인증서는 이 사용자가 공개키의 올바른 소유주다 알려주는 것

A는 서명해서 B에 보내고, B는 인증서 저장소에서 인증서를 가져와서 밸리데이션 체크, CRL 보고 폐기된 거 아닌지 체크

 

 

맨 오른쪽에 루트 인증서인데 빼먹고 안바꿈

Digial Certificate

- 공개키 소유자에 대한 신원 확인

- 상위 CA의 개인키로 암호화(서명)

- 최상위 CA(Root CA)인증서부터 사용자/서버 인증서까지 체인으로 연결(체인 검증)