양방향 | 특정한 key를 통해 암호화와 복호화가 모두 가능한 암호화 | ||
주민등록번호나 핸드폰번호처럼 보안이 필요한 정보지만 평문으로 돌릴 필요가 있는 경우 사용 | |||
대칭키 | private key 하나로 암호화와 복호화 모두 실행함 | ||
AES | AES 표준은 AES-128, AES-192, AES-256이며, 뒤에 붙은 숫자는 키의 길이(bit)를 의미 | ||
주로 AES-128의 개선된 버젼인 AES-256을 사용 | |||
미국 정보가 기밀문서를 암호화했을 정도로 신뢰도가 높은 알고리즘으로, 사람들은 키가 없으면 해독하는 것이 불가능하다고 이야기함 | |||
신뢰도가 높고, 속도가 빠름 | |||
private key가 유출될 경우, 모든 정보가 노출됨 | |||
비대칭키 | public key로 암호화, private key로 복호화 함 | ||
RSA | 소인수분해를 이용한 알고리즘 | ||
복잡한 연산을 사용하기 때문에 보안 강도가 높음 | |||
복잡한 연산을 사용하기 때문에 속도가 비교적 느림 | |||
public key 관리가 번거로움 | |||
단방향 | 복호화가 불가능한 암호화 | ||
비밀번호처럼 다시 평문으로 돌릴 필요가 없는 경우 사용 | |||
Hash | 데이터의 길이와 상관없이 데이터를 입력받아 일정한 길이의 해시값으로 변환해주는 함수 | ||
속도가 빠르고, 충돌이 일어나지 않으며, 같은 값을 입력한 경우 같은 해시값이 나오기 때문에 비교에 좋음 | |||
값이 아주 조금 변화하더라도 해시값이 아주 많이 바뀌는 것을 눈사태 효과라고 함 | |||
같은 값을 입력한 경우 같은 해시값이 나오기 때문에 이를 알아낸다면 암호화 의미가 없어짐 | |||
SHA | 미국 국가 표준 알고리즘 | ||
TLS, SSL, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용 | |||
SHA-0, SHA-1, SHA-2(SHA-224, SHA-256, SHA-384, SHA-512), SHA-3가 있으며, 주로 SHA-2 알고리즘을 많이 사용 (SHA-0, SHA-1 함수는 오래 전 개발된 알고리즘인만큼 공격이 많이 발견됨) | |||
SHA-256은 높은 보안 강도와 빠른 속도를 제공하여 인증서와 블록체인 등에서 사용됨 | |||
MD5 | 가장 흔한 HASH 함수 | ||
흔한만큼 제일 안전하지 않다고 판단하는 알고리즘 | |||
요즘은 사용하지 않는 것을 권장함 | |||
BCrypt | 처음부터 단방향 암호화를 위해 만들어진 해시 함수 | ||
SHA 해시 함수의 취약점을 보안 | |||
무작위 데이터를 더해서 해시값을 생성하는 salting과 단방향 해시값을 계산한 후 그 해시값을 다시 해시하는 과정을 반복하는 키 스트레칭 방법을 구현 | |||
해시 함수의 단점인 같은 값을 입력할 경우 같은 해시값이 나온다는 단점을 극복 | |||
Spring Boot에서는 BCrypt를 이용한 비밀번호 암호화를 지원 |