개발 과정 중 전화번호 암호화, 비밀번호 암호화가 필요해서 암호화 알고리즘을 선택해야 했다. RSA와 AES는 복호화가 필요한 경우 사용하고, SHA는 복호화가 필요 없는 경우(비밀번호)에 사용했다.
다른 글들을 찾아보니 대부분 암호화 알고리즘에 대해 정리했다. 그러나 이 글에서는 수학적인 부분은 간소화하고 Web 개발자의 관점에서 필요한 부분을 정리해보려고 한다.
RSA / SHA / AES 방식의 차이점
우선 RSA와 AES는 양방향 암호화 방식이고, SHA는 단방향 암호화 방식이다.
이 차이는 복호화가 가능한지 여부에 따라 나뉜다. 복호화가 가능하면 양방향이고, 복호화가 불가하면 단방향이다.
전화번호의 경우 암호화해서 저장했다가, 필요한 경우 복호화해서 사용해야한다.
그러나 비밀번호의 경우에는 복호화가 필요없고, 로그인 시 입력받은 값의 비밀번호화 일치하는지만 확인하면 된다.
암호화 방식에 따라 사용처가 다르다.
Front단에서 입력받은 데이터를 Backend로 전달할 때는 RSA 암호화 방식을 사용하고,
전화번호를 DB에 저장할 때는 AES 방식을, 비밀번호를 DB에 저장할 때는 SHA 방식을 사용했다.
암호화 및 복호화 flow
전화번호와 비밀번호는 각각 다른 방식으로 DB에 저장된다.
그 과정을 알아보자.
- 사용자에게 값을 입력받음
- 백엔드 api로 RSA public-key를 요청
- 발급받은 RSA public-key를 이용한 RSA 방식 암호화
- 암호화된 데이터를 Back-End로 저장 요청
- 세션에 저장해 둔 RSA private-key를 이용한 요청 데이터 복호화
- SHA 방식으로 비밀번호 암호화, AES 방식으로 전화번호 암호화
- 암호화된 String을 DB에 INSERT
이제 각 암호화 방식에 대해 자세히 알아보자.
여러 가지 암호화 방식
RSA 암호화
RSA 암호화는 복호화가 가능한 양방향 암호화 방식이다.
RSA 암호화에는 아래 요소들이 필요하다.
- 키 생성에 필요한 두 개의 큰 소수: p, q
- 모듈러스: n = p x q
- 공개키 e: (p-1)(q-1)와 서로소인 수
- 개인키 : d = 유클리드 호제법을 이용한 연산
위의 값들을 조합해서 암호화, 복호화에 사용한다.
평문 M을 암호문 C로 바꾸고, 다시 암호문 C를 평문 M으로 수정할 수 있다.
RSA 암호화를 잘 설명해준 글이 있어 공유한다.
https://nordvpn.com/ko/blog/rsa/
SHA 암호화
SHA 암호화 방식은 복호화가 불가능한 단방향 암호화 방식이다.
미국 국가안보국(NSA)에서 1993년 설계한 방식으로, 미국 국가 표준으로 지정되었다.
처음에 개발된 SHA-0부터 SHA-1, SHA-2(224, 256, 384, 512 등)이 있다.
SHA-1이 가장 많이 사용되고, TSL, SSL, IPSec, SSH 등에서 사용한다.
단방향 암호화가 필요한 경우 SHA 암호화 방식을 고려해 볼 만하다.
예를 들면, 비밀번호를 암호화하여 DB에 저장하고 로그인 시에 비밀번호 입력값을 같은 방식으로 암호화 한 뒤, DB에 저장된 값과 비교하는 방식으로 동일 여부를 판단할 수 있다.
AES 암호화
AES 암호화 방식은 복호화가 가능한 양방향 암호화 방식이고,
대칭키 방식으로 암복호화 시 사용하는 Key가 동일한 암호화 방식이다.
AES-128, AES-192, AES-256 등이 있고 각각 뒤에 붙은 숫자는 키의 길이이다.
키 하나만으로 암호화와 복호화를 할 수 있기 때문에, 이 Secret을 잘 보관해야한다.
Spring에서 구현 방법 추후 추가..
'컴퓨터 공학' 카테고리의 다른 글
[CS/Network] TCP와 UDP 프로토콜 (0) | 2023.07.20 |
---|---|
[CS] CPU 파이프라인 (0) | 2023.07.14 |
[CS] CPU의 구조와 동작 원리, 데이터 접근 (0) | 2023.07.12 |
[CS] 메모리 계층과 저장 장치(RAM, Register,Cache, HDD) (0) | 2023.07.11 |
[CS/디지털논리회로] 덧셈기(adder), 반 가산기, 전 가산기 (0) | 2023.07.11 |