728x90

0. 주의사항
- 보안 전문가가 아니라면 직접 암호 구현을 하지 말아야 합니다. “Don’t roll your own crypto.”
- 시스템 보안도 마찬가지로, 정식 보안 훈련 없이 함부로 적용하면 큰 위험을 초래할 수 있습니다.
1. Entropy (엔트로피)
정의
- 무작위성(randomness)의 정도를 수학적으로 측정하는 값
- 특정 시스템이나 암호의 예측 불가능성을 수치로 나타냄
- 단위는 bit
계산 방식
- 경우의 수가 N일 때:entropy=log2(N)entropy = \log_2(N)
- 예:
- 동전 던지기: 경우의 수 2 → 1 bit
- 주사위: 경우의 수 6 → 약 2.58 bits
비밀번호 엔트로피
- Tr0ub4dor&3 같은 비밀번호는 복잡해 보이지만, 실제로는 공격자가 “문자 치환 패턴”을 알고 있다면 경우의 수가 줄어들어 엔트로피가 낮음
- 반대로 correcthorsebatterystaple 같은 사전 단어 나열 방식은 길고 단어 선택 폭이 넓어 엔트로피가 훨씬 높음
안전 기준
- 온라인 공격(웹 로그인 같은 환경): 약 40 bits면 안전
- 오프라인 공격(해시 덤프 후 무차별 대입): 80 bits 이상 필요
2. Cryptographic Hash Functions (암호학적 해시 함수)
정의
- 임의 크기의 데이터를 고정 크기 출력값으로 변환하는 함수
- 일반 해시와 달리, 보안 특성을 만족해야 함
주요 특성
- Deterministic: 동일 입력 → 항상 동일 출력
- Preimage resistant (단방향성): 출력만으로 입력을 역추적하기 매우 어려움
- Second preimage resistant (목표 충돌 저항성): 특정 입력 m₁에 대해, 같은 해시를 내는 다른 입력 m₂ 찾기 어려움
- Collision resistant (충돌 저항성): 서로 다른 입력 m₁, m₂가 같은 해시 출력 생성하는 것 자체가 어려움
주의: 충돌 저항성은 항상 목표 충돌 저항성보다 강한 조건
예시
- SHA-1: Git에서 오래 쓰였으나, 현재는 충돌 공격이 가능해 안전하지 않음
- SHA-256, SHA-3 등 현대적인 해시 함수 사용 권장
활용 사례
- Git: 커밋과 파일을 내용 기반(content-addressed)으로 저장
- 파일 무결성 검증: 공식 사이트에서 제공하는 해시값과 다운로드 받은 파일의 해시를 비교
- Commitment scheme: 값 r을 숨기고 싶을 때 h = hash(r)만 먼저 공개 → 나중에 r을 공개해 검증 가능
3. Key Derivation Functions (KDF)
정의
- 해시 함수와 유사하게 동작하지만, 주 목적은 비밀번호 같은 입력값을 안전한 암호 키로 변환하는 것
- 의도적으로 느리거나 계산량이 많은 설계 → 공격자가 무차별 대입(brute-force) 공격을 하려면 많은 자원 소모
주요 활용
- 비밀번호 기반 키 생성
- 사용자가 입력한 passphrase → KDF → 암호화 알고리즘 키로 변환
- 비밀번호 저장
- 평문 저장 X
- 사용자별 salt = random() 생성
- KDF(password + salt) 저장
- 로그인 시 입력값 + salt를 다시 KDF 적용해 비교
예시
- PBKDF2, bcrypt, scrypt, Argon2 등이 널리 쓰임
4. Symmetric Cryptography (대칭 암호)
정의
- 같은 키를 이용해 암호화(encrypt)와 복호화(decrypt) 수행
- 암호화된 메시지는 키 없이는 해독 불가능
대표 알고리즘
- AES (Advanced Encryption Standard)
활용 사례
- 파일 암호화: 클라우드에 저장 시 데이터 보호
- KDF + passphrase: 사람이 기억할 수 있는 비밀번호를 통해 대칭키 생성 → 파일 암호화
특징
- 속도가 빠르고 효율적이지만, 키 공유 문제(key distribution problem) 존재
5. Asymmetric Cryptography (비대칭 암호)
정의
- **공개키(public key)**와 **개인키(private key)**라는 두 개의 키 사용
- 공개키는 누구나 공유 가능, 개인키는 철저히 비밀 유지
기능
- 암호화/복호화
- 공개키로 암호화 → 개인키로만 복호화 가능
- 전자 서명(Sign/Verify)
- 개인키로 서명 → 공개키로 검증 가능
비유
- 대칭 암호: 문 열쇠. 가진 사람은 누구나 잠그고 열 수 있음
- 비대칭 암호: 자물쇠(공개키)와 열쇠(개인키). 누구나 자물쇠를 잠글 수 있지만, 열쇠는 나만 가짐
활용 사례
- PGP 이메일 암호화 (공개키 서버 활용)
- Signal/Keybase 메신저 (세션 키 교환)
- Git GPG 커밋/태그 서명
6. Key Distribution (키 배포 문제)
문제
- “공개키가 실제 누구의 것인지” 확인하는 과정이 어려움
- 신원 매핑 실패 시 중간자 공격(Man-in-the-Middle) 발생 가능
다양한 해결책
- Signal: Trust on First Use (TOFU), 안전 번호를 직접 대조
- PGP: Web of Trust (다른 사람들의 서명으로 신뢰 확장)
- Keybase: Social Proof (SNS 계정과 연동해 신원 보증)
7. Case Studies (사례)
- Password Managers
- KeePassXC, pass, 1Password 등
- 모든 계정에 대해 고엔트로피 비밀번호 자동 생성 & 암호화 저장
- 장점: 비밀번호 재사용 방지, 한 번의 기억으로 전체 관리
- Two-Factor Authentication (2FA)
- 비밀번호(알고 있는 것) + 인증 장치(가지고 있는 것)
- 예: YubiKey, Google Authenticator
- Full Disk Encryption
- 노트북 도난 시 데이터 보호
- Linux: LUKS/cryptsetup
- Windows: BitLocker
- macOS: FileVault
- Private Messaging
- Signal, Keybase 등은 종단간 암호화(E2EE) 사용
- 공개키 인증을 반드시 검증해야 안전
- SSH
- ssh-keygen → 비대칭 키 생성
- 개인키는 passphrase + KDF로 암호화하여 디스크 저장
- 인증 과정: 서버가 난수 → 클라이언트가 서명 후 반환 → 서버가 공개키로 검증
8. Exercises (실습 과제)
- Entropy 계산
- 사전 단어 4개 조합 vs 랜덤 8자리 알파벳/숫자 조합 → 엔트로피 비교
- 공격자가 초당 1만 번 시도 가능하다면, 평균 몇 년 걸릴지 계산
- Hash 검증
- Debian ISO를 미러에서 다운로드
- sha256sum으로 공식 해시와 비교
- 대칭 암호 실습
- OpenSSL AES로 파일 암호화/복호화 수행
- 비대칭 암호 실습
- SSH 키 생성 및 passphrase 보호
- GPG 키 생성 후 이메일 암호화
- Git 커밋/태그 서명 및 검증
정리
- Entropy: 비밀번호의 강도는 “길이 + 무작위성”이 결정
- Hash: Git/파일 무결성/commitment 등 핵심 도구
- KDF: 비밀번호를 안전하게 키로 변환, 느린 알고리즘 설계로 공격 방어
- Symmetric Crypto: 빠르지만 키 공유 문제 존재 (AES)
- Asymmetric Crypto: 공개/개인키 쌍 기반, 암호화와 서명 모두 가능
- Key Distribution: 실제 신원과 공개키를 연결하는 것이 가장 어려운 과제
- 실습: 엔트로피 계산, 해시 검증, AES 암호화, SSH/GPG 활용
728x90
'프로그래밍공부(Programming Study)' 카테고리의 다른 글
| Potpourri (자잘하지만 중요한 주제들) (2) | 2025.09.10 |
|---|---|
| 메타프로그래밍(Metaprogramming)과 DevOps: 빌드·의존성·CI 제대로 이해하기 (0) | 2025.09.08 |
| 커맨드라인 환경 정리 – 효율적인 셸 활용법 (2) | 2025.08.30 |
| grep 명령어 유용하게 잘 쓰는 법 (실전 꿀팁 포함!) (2) | 2025.06.03 |
| SRE, DevOps, 개발자의 업무 초점과 주요 지표(Key Metrics) 한눈에 보기 (0) | 2025.03.08 |
댓글