
평문을 해독할 수 없는 암호문으로 변환하는 것
단방향(해싱)과 양방향 암호화로 나뉨

출처: https://raonctf.com/essential/study/web/cryptography
해시 알고리즘을 이용하여 평문을 복호화 할 수 없는 형태로 암호화
MD5와 SHA 알고리즘이 있음
사용자 비밀번호와 같은 경우 자주 사용
MD5, SHA-0, SHA-1은 해시 충돌 발생 취약, 사용 지양
복호화가 불가능하지만 Rainbow Table을 통해 원문 조회 가능
Rainbow Table
평문과 해시 함수로 만든 문자열을 모두 저장시켜 놓은 표
그러므로 만약 암호화된 데이터를 탈취당하더라도 원문을 알아낼 수 없도록 조치가 필요
=> Salt, Key stretching
평문에 임의로 문자열을 추가하여 암호화
소금을 곁들여 먹는 거 같다고 해서 Salt
Salt는 128bit 이상으로 만들길 권장
사용자마다 다른 Salt를 사용하는 것이 안전
해시를 여러 번 반복해서 원문을 알기 힘들게 만듬
일반적인 시스템에서 0.2초 이상 반복하는 게 안전
이미 검증받은 알고리즘을 사용하는 것이 안전
NIST(미국표준기술연구소)에서 승인된 알고리즘
DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
비밀번호 저장을 목적
OpenBSD에서 기본으로 사용하고 있는 알고리즘
평문을 복호화 할 수 있는 형태로 암호화
대칭키(AES), 비대칭키(RSA) 알고리즘
AES가 대표적
같은 키를 사용하여 암호화, 복호화 모두 가능
RSA가 대표적
공개키와 개인키 2개가 존재
RSA는 소인수 분해를 기반으로 만들어진 알고리즘
https://github.com/brix/crypto-js
https://github.com/kelektiv/node.bcrypt.js
😅 해당 내용은 공부하면서 정리한 글입니다. 틀린 부분이나 오해하고 있는 부분이 있다면 피드백 부탁드립니다.
관련 레퍼런스