Quick Comparison
text
hash: input -> fixed-size digest, 복호화 목적 아님
symmetric crypto: same secret key로 암호화·복호화
public-key encryption: receiver public key로 암호화, private key로 복호화
digital signature: signer private key로 서명, public key로 검증
key agreement: 양쪽 입력으로 공유 비밀을 합의비밀번호 저장에는 빠른 일반 hash 하나가 아니라 salt와 비용 조절이 가능한 password hashing 또는 key derivation function을 사용합니다. 암호화는 무결성을 자동 보장하지 않으므로 인증된 암호 방식을 우선합니다.
목적 분리
Hash는 파일 변경 감지와 message digest에 쓰지만 key 없는 hash만으로 공격자가 만든 위조를 막을 수는 없습니다. Secret key로 무결성을 확인할 때는 HMAC 같은 keyed construction을 사용합니다.
대칭키 암호는 대량 데이터 처리에 효율적이지만 양쪽이 secret key를 안전하게 공유해야 합니다. 공개키 암호화, 전자 서명, 키 합의는 서로 다른 primitive입니다. 실제 protocol은 인증과 키 합의로 session key를 만들고 대칭 방식으로 데이터를 보호하는 조합을 흔히 사용합니다.
자주 틀리는 점
- Base64 encoding을 암호화라고 부르지 않습니다.
- Hash digest가 같을 가능성이 이론적으로 0이라고 말하지 않습니다.
- 직접 암호 algorithm이나 mode를 조합하지 않고 검증된 library와 protocol을 사용합니다.
- Private key와 password, session key의 수명과 저장 위치를 구분합니다.
참고 링크
5 sources