[주민번호는 양방향 암호화 / 패스워드는 단방향 암호화]
양방향 알고리즘은 암호화된 암호문을 복호화 할 수 있는 알고리즘을 의미하고
단방향 알고리즘은 암호화는 수쟁하지만 절대로 복호화가 불가능한 알고리즘을 의미한다.
양방향은 대칭키와 비대칭키가 있으며, 단방향은 HASH가 있다.
- 양방향 알고리즘 : 암호화, 복호화 가능 (대칭키, 비대칭키)
- 단방향 알고리즘 : 암화화 가능, 복호화 불가
대칭키(비공개키) 방식 : DES, AES
비대칭키(공개키) 방식 : RSA
양방향 암호화 방식 (주민번호 암호화 시 사용)
단방향 암호화 방식 (패스워드 암호화 시 사용)
단방향 암호화 방식 (패스워드 암호화 시 사용)
기본적으로 SpringBoot는 단방향 해슁 알고리즘에 Salt를 추가하여 Encoding을 해주는 PasswordEncoder를 사용할 수 있습니다.
해당 코드는
org.springframework.security.crypto.factory.PasswordEncoderFactories
다음 패키지에 포함되어 있습니다. (버전 5.0부터 사용이 가능합니다.)
PasswordEncoderFactories의 구현부에 createDelegatingPasswordEncoder를 활용하면, PasswordEncoder를 반환받을 수 있습니다.
이 저장해놓은 테이블을 RainbowTable이라고 하고, 이를 활용하여 미리 저장된 역산의 결괏값을 가지고 원래 비밀번호를 찾아내는 공격을 RainbowTable Attack이라고 합니다.
따라서 저희는 123456 -> HASH -> "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"를 사용하지 않고
(123456 + salt) -> HASH -> "xxxxxxxx" 를 사용하게 됩니다. 이렇게 되면 RainbowAttack의 확률을 현저히 낮출 수 있고, 만약에 A라는 유저와 B라는 유저가 같은 비밀번호를 공유한다 하더라도 저장된 결괏값이 다르기 때문에 보안성을 높일 수 있습니다.
* https://chanho0912.tistory.com/33 에서 가져온 내용입니다.
https://st-lab.tistory.com/100
- 자세한 내용 참고
'IT 개발 > JAVA' 카테고리의 다른 글
[JAVA] 파파고 번역기 API 사용 (0) | 2023.04.05 |
---|---|
JAVA - 도로명 주소 Open Api 사용 (0) | 2023.04.05 |
JAVA - WAS 서버에서 이미지 표출 처리 (0) | 2023.03.13 |
CollectionUtils 사용법 (0) | 2023.01.02 |
PDF파일 작성 (pdfbox) (0) | 2022.07.07 |