PKI/Cryptography

[λ²ˆμ—­κΈ€] μ•”ν˜Έν™” κ°œμš” ( Cryptography Overview )

JayKimπŸ™‚ 2023. 6. 22. 09:13

이글은 Pratical Cryptograpy for developers 에 μžˆλŠ” λ‚΄μš©μ„ λ²ˆμ—­ν•œ κΈ€μž…λ‹ˆλ‹€.[원문]

ν˜„λŒ€ μ•”ν˜Έν™” κ°œμš” ( Overview of Modern Cryptography )

μ•”ν˜Έν™”λŠ” 졜초의 μ‹œλ„(μˆ˜μ²œλ…„ μ „)μ—μ„œ μ‹œμž‘ λ˜μ–΄μ„œ
개발자λ₯Ό μœ„ν•œ 졜초의 성곡적인 μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜(ν˜„μž¬λŠ” μ€ν‡΄ν•œ MD5 및 DES와 같은)을 톡해
μ΅œμ‹  μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜(SHA-3, Argon2 및 ChaCha20κ³Ό 같은)으둜 λ°œμ „ν–ˆμŠ΅λ‹ˆλ‹€.

λ¨Όμ € κ°„λ‹¨νžˆ μ†Œκ°œ ν•˜λ©΄ μ•”ν˜Έν™” ν•΄μ‹œ κΈ°λŠ₯(SHA-256, SHA3, RIPEMD λ“±), HMAC(ν•΄μ‹œ λ©”μ‹œμ§€ 인증 μ½”λ“œ), ν‚€ νŒŒμƒ κΈ°λŠ₯에 λŒ€ν•œ μ•”ν˜Έ(예: Scrypt), Diffie-Hellman ν‚€ κ΅ν™˜ ν”„λ‘œν† μ½œ, λŒ€μΉ­ ν‚€ μ•”ν˜Έν™” 체계(예: CBC 및 CTR 블둝 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” AES μ•”ν˜Έ) 및 곡개 및 개인 ν‚€λ₯Ό μ‚¬μš©ν•˜λŠ” λΉ„λŒ€μΉ­ ν‚€ μ•”ν˜Έν™” 체계(예: RSA μ•”ν˜Έ 및 타원 곑선 기반 μ•”ν˜Έν™”/ECC, secp256k1 곑선 및 Ed25519 μ•”ν˜Έ μ‹œμŠ€ν…œ), 디지털 μ„œλͺ… 및 ECDSA, μ—”νŠΈλ‘œν”Ό 및 μ•ˆμ „ν•œ λ‚œμˆ˜ 생성 및 μ–‘μž μ•ˆμ „ μ•”ν˜Έμ˜ κ°œλ…λ“± μžˆμŠ΅λ‹ˆλ‹€.

μ•”ν˜Έν™”λž€ λ¬΄μ—‡μž…λ‹ˆκΉŒ? (What is Cryptography?)

μ•”ν˜Έν™”λŠ” λ³΄μ•ˆ 및 정보 보호λ₯Ό μ œκ³΅ν•˜λŠ” κ³Όν•™μž…λ‹ˆλ‹€.
그것은 디지털 μ„Έκ³„μ˜ λͺ¨λ“  κ³³μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.
μ›Ή μ‚¬μ΄νŠΈλ₯Ό μ—΄κ±°λ‚˜ 이메일을 λ³΄λ‚΄κ±°λ‚˜ WiFi λ„€νŠΈμ›Œν¬μ— μ—°κ²°ν•  λ•Œμž…λ‹ˆλ‹€.
κ·Έλ ‡κΈ° λ•Œλ¬Έμ— κ°œλ°œμžλŠ” μ•”ν˜Έν™”μ— λŒ€ν•œ 기본적인 이해와 μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜ 및 μ•”ν˜Έν™” 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” 방법, ν•΄μ‹±, λŒ€μΉ­/λΉ„λŒ€μΉ­ μ•”ν˜Έ 및 μ•”ν˜Έν™” 체계, 디지털 μ„œλͺ…, μ•”ν˜Έν™” μ‹œμŠ€ν…œ 및 μ•Œκ³ λ¦¬μ¦˜μ„ 이해해야 ν•©λ‹ˆλ‹€.

μ•”ν˜Έν™” 및 ν‚€ (Encryption and Keys)

μ•”ν˜Έν™”λŠ” 데이터λ₯Ό μ•ˆμ „ν•œ λ°©μ‹μœΌλ‘œ μ €μž₯ν•˜κ³  μ „μ†‘ν•˜λŠ” μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ―€λ‘œ μ˜λ„λœ μ‚¬λžŒλ§Œ 데이터λ₯Ό 읽고 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” ν•˜λ‚˜ μ΄μƒμ˜ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 일반 ν˜•μ‹μ—μ„œ μ•”ν˜Έν™”λœ ν˜•μ‹μœΌλ‘œ λ˜λŠ” κ·Έ λ°˜λŒ€λ‘œ 데이터λ₯Ό λ³€ν™˜ν•˜λŠ” λŒ€μΉ­ λ˜λŠ” λΉ„λŒ€μΉ­ μ•”ν˜Έν™” 체계λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ•”ν˜Έν™” 및 ν•΄λ…ν•˜λŠ” μž‘μ—…μ΄ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€.

AES, Twofish 및 ChaCha20κ³Ό 같은 λŒ€μΉ­ μ•”ν˜Έν™”λŠ” λ™μΌν•œ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”μ‹œμ§€λ₯Ό μ•”ν˜Έν™” 및 ν•΄λ…ν•˜λŠ” 반면,
λΉ„λŒ€μΉ­ μ•”ν˜Έν™”λŠ” 곡개 ν‚€ μ•”ν˜Έ μ‹œμŠ€ν…œ(RSA λ˜λŠ” ECC와 같은)κ³Ό ν‚€ 쌍(곡개 ν‚€(μ•”ν˜Έν™” ν‚€) 및 ν•΄λ‹Ή 개인용)을 μ‚¬μš©ν•©λ‹ˆλ‹€.
ν‚€(λ³΅ν˜Έν™” ν‚€). μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜μ€ μ’…μ’… μ•”ν˜Έν™” 체계(예: AES-256-CTR-HMAC-SHA-256, ChaCha20-Poly1305 λ˜λŠ” ECIES-secp256k1-AES-128-GCM)μ—μ„œ κ²°ν•©λ©λ‹ˆλ‹€.
μ•”ν˜Έν™”λŠ” ν‚€(큰 λΉ„λ°€ 번호)λ₯Ό 닀루며 λ§Žμ€ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μ΄λŸ¬ν•œ ν‚€λŠ” ν‚€ νŒŒμƒ μ•Œκ³ λ¦¬μ¦˜(예: PBKDF2 및 Scrypt)을 μ‚¬μš©ν•˜μ—¬ 숫자, μ•”ν˜Έ λ˜λŠ” μ•”ν˜Έμ—μ„œ νŒŒμƒλ©λ‹ˆλ‹€.

디지털 μ„œλͺ… 및 λ©”μ‹œμ§€ 인증 (Digtal Signatures and Message Authentication)

μ•”ν˜Έν™”λŠ” λ©”μ‹œμ§€ μ§„μœ„, 무결성 및 뢀인 방지λ₯Ό 보μž₯ν•˜λŠ” λ©”μ‹œμ§€μ˜ 디지털 μ„œλͺ… μˆ˜λ‹¨μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
λŒ€λΆ€λΆ„μ˜ 디지털 μ„œλͺ… μ•Œκ³ λ¦¬μ¦˜(예: DSA, ECDSA 및 EdDSA)은 λΉ„λŒ€μΉ­ ν‚€ 쌍(개인 및 곡개 ν‚€)을 μ‚¬μš©ν•©λ‹ˆλ‹€.
λ©”μ‹œμ§€λŠ” 개인 ν‚€λ‘œ μ„œλͺ…λ˜κ³  μ„œλͺ…은 ν•΄λ‹Ή 곡개 ν‚€λ‘œ ν™•μΈλ©λ‹ˆλ‹€.
은행 μ‹œμŠ€ν…œμ—μ„œ 디지털 μ„œλͺ…은 κ²°μ œμ— μ„œλͺ…ν•˜κ³  μŠΉμΈν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
블둝체인 μ„œλͺ… κ±°λž˜μ—μ„œ μ‚¬μš©μžλŠ” ν•œ μ£Όμ†Œμ—μ„œ λ‹€λ₯Έ μ£Όμ†Œλ‘œ 블둝체인 μžμ‚°μ„ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.
μ•”ν˜Έν™”λŠ” λ©”μ‹œμ§€ 인증 μ•Œκ³ λ¦¬μ¦˜(예: HMAC) 및 λ©”μ‹œμ§€ 인증 μ½”λ“œ(MAC μ½”λ“œ)λ₯Ό μ²˜λ¦¬ν•˜μ—¬ λ©”μ‹œμ§€ μ§„μœ„, 무결성 및 μ €μžλ₯Ό 증λͺ…ν•©λ‹ˆλ‹€.
λ³΄μ•ˆ 톡신을 보μž₯ν•˜κΈ° μœ„ν•΄ 인증이 μ•”ν˜Έν™”μ™€ ν•¨κ»˜ μ‚¬μš©λ©λ‹ˆλ‹€.

λ³΄μ•ˆ λ‚œμˆ˜ (Secure Random Numbers)

μ•”ν˜Έν™”λŠ” λ‚œμˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μ—”νŠΈλ‘œν”Ό(μ˜ˆμΈ‘ν•  수 μ—†λŠ” μž„μ˜μ„±)λ₯Ό μ²˜λ¦¬ν•˜κ³  λ‚œμˆ˜μ˜ μ•ˆμ „ν•œ 생성(예: CSPRNG μ‚¬μš©)을 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
μ•ˆμ „ν•œ λ‚œμˆ˜λŠ” 본질적으둜 μ˜ˆμΈ‘ν•  수 μ—†μœΌλ©° λ‚œμˆ˜ 생성기가 μ†μƒλ˜λ©΄ μ‹œμŠ€ν…œμ΄λ‚˜ 앱이 μ†μƒλ˜κ±°λ‚˜ ν•΄ν‚Ήλ˜κΈ° λ•Œλ¬Έμ— κ°œλ°œμžλŠ” 이에 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ν‚€ κ΅ν™˜ (Key exchange)

μ•”ν˜Έν™”λŠ” μ•”ν˜Έν™”λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”μ‹œμ§€λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•˜λ €λŠ” 두 λ‹Ήμ‚¬μž 간에 μ•”ν˜Έν™” ν‚€λ₯Ό μ•ˆμ „ν•˜κ²Œ μ„€μ •ν•˜λŠ” 데
μ‚¬μš©λ˜λŠ” ν‚€ κ΅ν™˜ μ•Œκ³ λ¦¬μ¦˜(예: Diffie-Hellman ν‚€ κ΅ν™˜ 및 ECDH) 및 ν‚€ μ„€μ • 체계λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ€ 일반적으둜 두 λ‹Ήμ‚¬μž 간에 μƒˆλ‘œμš΄ λ³΄μ•ˆ 연결이 섀정될 λ•Œ μˆ˜ν–‰λ©λ‹ˆλ‹€.
μ΅œμ‹  μ›Ή μ‚¬μ΄νŠΈλ₯Ό μ—΄κ±°λ‚˜ WiFi λ„€νŠΈμ›Œν¬μ— μ—°κ²°ν•  λ•Œ 같은 경우 μ‚¬μš© λ©λ‹ˆλ‹€.

μ•”ν˜Έν™” ν•΄μ‹œ 및 λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹± ( Cryptographic Hashes and Password Hashing )

μ•”ν˜Έν™”λŠ” λ©”μ‹œμ§€λ₯Ό λ©”μ‹œμ§€ λ‹€μ΄μ œμŠ€νŠΈ(κ³ μ • 길이의 ν•΄μ‹œ)둜 λ³€ν™˜ν•˜λŠ” μ•”ν˜Έν™” ν•΄μ‹œ κΈ°λŠ₯(예: SHA-3 및 BLAKE2)을 μ œκ³΅ν•©λ‹ˆλ‹€.
이 κΈ°λŠ₯은 μ›λž˜ λ©”μ‹œμ§€λ‘œ 되돌릴 수 μ—†μœΌλ©° μž…λ ₯을 거의 κ³ μœ ν•˜κ²Œ μ‹λ³„ν•©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ 블둝체인 μ‹œμŠ€ν…œμ—μ„œ ν•΄μ‹œλŠ” 블둝체인 μ£Όμ†Œ, νŠΈλžœμž­μ…˜ ID 및 기타 λ§Žμ€ μ•Œκ³ λ¦¬μ¦˜κ³Ό ν”„λ‘œν† μ½œμ„ μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
Git μ•”ν˜Έν™” ν•΄μ‹œλŠ” 파일 및 컀밋에 λŒ€ν•œ 고유 IDλ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
μ•”ν˜Έ ν•΄μ‹± 및 μ•”ν˜Έ ν‚€ νŒŒμƒ κΈ°λŠ₯(예: Scrypt 및 Argon2)은 ν…μŠ€νŠΈ 기반 μ•”ν˜Έμ—μ„œ ν•΄μ‹œ(λ˜λŠ” ν‚€)λ₯Ό μ•ˆμ „ν•˜κ²Œ νŒŒμƒν•˜κ³ 
μž„μ˜ 맀개 λ³€μˆ˜(Salt)λ₯Ό μ£Όμž…ν•˜κ³ 
λ§Žμ€ μ•”ν˜Έ ν¬λž˜ν‚Ή 속도λ₯Ό λŠ¦μΆ”κΈ° μœ„ν•œ 반볡(Iteration) 및 μ»΄ν“¨νŒ… λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš© ν•©λ‹ˆλ‹€..

μ•”ν˜Έν•™μ˜ ν˜Όλž€κ³Ό ν™•μ‚° ( Confusion and Diffusion in Cryptography )

μ•”ν˜Έν™”μ—μ„œ ν•΄μ‹±, μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜ 및 랜덀 μƒμ„±κΈ°λŠ” Shannon의 ν˜Όλž€(Confusion) 및 ν™•μ‚°(Diffusion) 원칙을 λ”°λ¦…λ‹ˆλ‹€.
ν˜Όλž€μ€ 좜λ ₯ ν˜•μ‹μ˜ 각 λΉ„νŠΈκ°€ μ•”ν˜Έκ°€ ν‚€ 및 μž…λ ₯ λ°μ΄ν„°μ˜ μ—¬λŸ¬ 뢀뢄에 μ˜μ‘΄ν•΄μ•Ό ν•˜λ―€λ‘œ 직접 맀핑을 μ„€μ •ν•  수 μ—†μŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. 확산은 μž…λ ₯μ—μ„œ ν•œ λΉ„νŠΈλ₯Ό λ³€κ²½ν•˜λ©΄ 좜λ ₯μ—μ„œ λΉ„νŠΈμ˜ μ•½ 절반이 λ³€κ²½λ˜μ–΄μ•Ό 함을 μ˜λ―Έν•©λ‹ˆλ‹€.
μ΄λŸ¬ν•œ 원칙은 λŒ€λΆ€λΆ„μ˜ ν•΄μ‹œ ν•¨μˆ˜, MAC μ•Œκ³ λ¦¬μ¦˜, λ‚œμˆ˜ 생성기, λŒ€μΉ­ 및 λΉ„λŒ€μΉ­ μ•”ν˜Έμ— μ‚¬μš© λ©λ‹ˆλ‹€.

μ•”ν˜Έν™” 라이브러리 ( Cryptographic Libraries )

κ°œλ°œμžλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 및 ν”Œλž«νΌμ— λŒ€ν•œ ν˜„λŒ€ μ•”ν˜Έν™” λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 이λ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.
μ•”ν˜Έν™”λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°œλ°œν•˜λ €λ©΄ μ•”ν˜Έν™” κ°œλ…μ„ 이해해야 ν•©λ‹ˆλ‹€.
μΈν„°λ„·μ—μ„œ μ½”λ“œλ₯Ό 볡사/λΆ™μ—¬λ„£κΈ°ν•˜κ±°λ‚˜ λΈ”λ‘œκ·Έμ˜ 예λ₯Ό λ”°λ₯΄λ©΄ μ•ˆμ „ν•˜μ§€ μ•Šμ€ λ””μžμΈκ³Ό μ·¨μ•½ν•œ λ³΄μ•ˆμ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ•”ν˜Έν™” λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 맀우 μœ μš©ν•˜μ§€λ§Œ λ¨Όμ € κ°œλ…μ„ μ΄ν•΄ν•œ λ‹€μŒ
μ μ ˆν•œ μ•Œκ³ λ¦¬μ¦˜ 쑰합을 μ„ νƒν•˜κ³  λ§€κ°œλ³€μˆ˜λ₯Ό μ‹ μ€‘ν•˜κ²Œ μ‘°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.