메시지 다이제스트(MD)
- 메시지의 무결성(위 변조 되지 않았음) 검사를 위해 암호 해시 함수를 이용하여 생성하는 크기가 고정된 값
- 비예측성 → 조금만 바뀌어도 그냥 완전히 다른 값이 나옴. 예측을 할 수가 없음
- 역상 저항성(PRE IMAGE RESISTANCE) → 해쉬로 부터 원래 값을 알아낼 수 없음
- 충돌 저항성(COLLISION RESISTANCE) → 어떤 원본 텍스트에 대해 해쉬 값이 같은 경우가 나오는 것을 충돌이라고 함. 충돌 안 한다는 것
- MD5(MessageDigest), SHA-256(사이즈 256비트 32바이트), KECCAK-256
- 주로 비밀번호를 hash 값으로 바꾸어서 db에 저장함. 비밀번호 찾기에서 새비밀번호 만들라고 하는게 회사도 비밀번호를 몰라서!!
대칭 키 암호(Symmetric Key)
- 암호화와 복호화에 같은 키를 사용하는 암호
- 대칭 키를 비밀 키라고도 함
- 대개 안전하며 암복호 속도가 매우 빠름
- 대칭 키의 공유해야 하는 문제가 있다
- AES128-CBC, AES256-GCM (알고리즘)(블록사이즈)-(운용방법)
- 128비트, 256비트
공개 키 암호(Asymmetric-Key)
- 암호화와 복호화에 서로 다른 키, 비대칭 키(ASYMMETRIC)를 사용하는 암호
- 개인 키와 공개 키, 공개 키는 개인 키로 유도하여 만듦
- 공개 키로 암호화 하고, 개인 키로 복호화 한다.
- 공개 키는 출력해서 나눠줘도 상관이 없는 것임. 개인 키는 꼭 잘 간수해야함
- 암복호의 비용이 대칭 키 암호화에 비해 매우 큼
- DIFFIE-HELLMAN, RSA, ECC(블록체인 암호화폐에서 많이 사용함), ...
- 바이너리 데이터를 base64 인코딩 한 것을 pem 포맷이라고 함
RSA 암호화
[참고]
일방향 함수
- RSA 알고리즘도 그렇지만 모든 공개키 암호화 알고리즘은 일방향 함수를 사용함
- 한 쪽으로는 계산이 용이한 반면, 반대쪽은 계산 하기에 매우 어려운 함수
- 일방향 함수의 역변환이 불가능 하다면 암호화 기밀성은 보장되지만 복호화를 못하기 때문에 두가지 키가 필요함
- RSA 공개키 암호화 알고리즘에서 사용하는 일방향 함수의 수학적 배경
두개의 매우 큰 소수의 곱을 구하는 것은 용이하지만 그 곱에서 원래의 두 개의 소수를 구하는 것은 매우 어려움
키 생성
- 서로 다른 임의의 두 개의 소수 p 와 q 를 선택함. p와 q는 클수록 암호화의 안전성이 높아짐
- p와 q를 곱한 값 n 을 생성
- 오일러 파이 함수
- ...
전자 서명(Digital Signature Algorithm, DSA)
- 개인 키로 서명하고, 공개 키로 검증한다.
- 공개 키 암호화 방식을 이용한 서명(공개 키 암호화 방식을 완전히 반대로 적용한 것)
- A는 원본 파일의 메시지 다이제스트(MD)를 구하고, 그 MD값을 A의 개인 키로 서명하여 B에게 원본 파일과 서명을 보냄
- B는 이미 가지고 있는 A의 공개 키를 사용하여 A가 보내 온 원본 파일과 서명을 검증한다.
- 누가 했는지를 알 수 있는 것. 중간에 누가 변조하지 않았구나 라는 것을 알 수 있음. 필적 조사 같은 느낌
- RSA, ECDSA, ...