요약
- 단방향 암호화: 해시 알고리즘을 사용하여 암호화는 가능하지만 복호화는 불가능한 암호화 방법.
- 솔팅(Salting)과 키 스트레칭(Key Stretching) 기법: 단방향 암호화의 단점 보완
- Bcrypt
- 레인보우 테이블 공격을 방지하기 위해 솔팅과 키 스트레칭을 적용한 대표적인 예.
- 단방향 해시 알고리즘이기 때문에 복호화 불가능. 따라서 비교하고 싶은 평문을 암호화된 값이 가지고 있는 알고리즘, Cost Factor, Salt을 이용하여 해시를 진행한 후 암호화된 값과의 비교를 통해 검증을 진행
- 양방향 암호화에는 대칭키 방식과 비대칭키 방식이 존재.
암호화와 복호화를 진행 시 Key 이용- 대칭키 방식의 양방향 암호화: 암호화 & 복호화에 동일한 Key 사용
Key 노출 시 보안 취약- 비대칭키 방식의 양방향 암호화: 암호화 & 복호화에 서로 다른 Key 사용
Key 노출 문제 해결
평문을 암호화 할 수는 있지만 복호화가 불가능한 암호화 방법
주로 해시 알고리즘을 이용해 구현
왜 쓸까?
활용
대표적인 해시 알고리즘 : MD5, SHA
한계
솔팅(Salting)
단방향 해시 함수를 통해, 본래 데이터에 랜덤 데이터를 더해 암호화하는 방식
(원래 데이터) <==(해시값이 다름!)==> (원래 데이터+추가 데이터)
소금(salt), 조미료를 솔솔솔 뿌리듯이 랜덤 데이터를 더한다
키 스트레칭(Key Stretching)
단방향 해시값 계산 후, 그 해시값을 다시 해시하고 또 이를 반복하는 방식
암호화한 결과물을 역산하는게 아닌
동일한 방식의 암호화한 결과물을 서로 비교하는 방식
왜 난수화된 패스워드가 필요할까?
DB작업은 사람이 한다! DB에 접근해서 가입자의 개인정보를 악용하는 사람이 있을 수 있으므로 암호화가 필요하다
브루스 슈나이어가 설계한 키(key) 방식의 대칭형 블록 암호
에 기반을 둔 암호화 해시 함수로서 Niels Provos 와 David Mazières가 설계했다.구조
$2b$12$76taFAFPE9ydE0ZsuWkIZexWVjLBbTTHWc509/OLI5nM9d5r3fkRG
\/ \/ \____________________/\_____________________________/
Alg Cost Salt Hash
2b : 해시 알고리즘 식별자
12 : Cost Factor로 Key Stretching의 수 (2의 12승번)
76taFAFPE9ydE0ZsuWkIZe : 16Byte 크기의 Salt, Base64로 인코딩된 22개의 문자
xWVjLBbTTHWc509/OLI5nM9d5r3fkRG : 24Byte의 해시 값, Base64로 인코딩된 31개의 문자
검증
암호화된 값이 가진 알고리즘
, Cost Factor
, Salt
을 이용하여 해시를 진행한 후 암호화된 값과의 비교를 통해 검증한다.양방향 암호화
평문의 암호화와 암호문의 복호화가 모두 가능한 암호화 방법
암호화 알고리즘과 키(Key)을 이용, 이 키를 통해서 암호화된 값을 보호
대칭키 방식
암호화 키와 복호화 키가 동일한 암호 시스템
암호화 키를 모르면 해당 암호문은 복호화 불가능.
대표적인 대칭키 양방향 알고리즘 : AES
한계
비대칭키 암호화
암호화 키와 복호화 키가 서로 다른 암호화 방식
Key Pair = Public Key(다른 사람들에게 공개) + Private Key(절대 노출X)
👉 키 탈취 문제, 관리의 단점 부분을 보완
👉 해커가 Public Key와 사용자가 서버로 보낸 데이터를 훔쳐도 그 데이터 확인할 수 없다. 서버가 가지고 있는 Private Key로만 복호화 가능함!
👉 Private Key는 절대 공개하면 안됨!
종이문서의 서명(인감)과 같이 전자문서에 서명한 사람이 누구인지 확인하고 서명된 전자문서의 위·변조사실을 알 수 있도록 전자문서에 부착하는 특수한 형태의 디지털 정보
비대칭키 암호화를 통해 구현
비대칭 암호화의 Key Pair = 종이문서의 인감도장과 인감증명의 역할. Private Key(인감도장)는 서명자만 보관해서 사용,
공개된 Private Key(임감증명) 통해 서명의 진위여부 확인
비대칭키를 이용한 전자서명 과정