본문 바로가기

Programming/알고리즘

[암호화] 양방향 암호화(AES, RSA)와 단방향 암호화(SHA, MD5, BCrypt)

양방향 특정한 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를 이용한 비밀번호 암호화를 지원