본문 바로가기
IT 개발/JAVA

JAVA - 주민번호, 패스워드 암호화 (양방향, 단방향 암호화)

by Love of fate 2023. 3. 24.
728x90
반응형

[주민번호는 양방향 암호화 / 패스워드는 단방향 암호화]

암호화 복호화

 

양방향 알고리즘은 암호화된 암호문을 복호화 할 수 있는 알고리즘을 의미하고 

단방향 알고리즘은 암호화는 수쟁하지만 절대로 복호화가 불가능한 알고리즘을 의미한다.

 

양방향은 대칭키와 비대칭키가 있으며, 단방향은 HASH가 있다. 

  • 양방향 알고리즘 : 암호화, 복호화 가능 (대칭키, 비대칭키)
  • 단방향 알고리즘 : 암화화 가능, 복호화 불가

 

대칭키(비공개키) 방식 : DES, AES

비대칭키(공개키) 방식 : RSA

 

양방향 암호화 방식 (주민번호 암호화 시 사용)

https://velog.io/@zz1996zz/%EC%95%94%ED%98%B8%ED%99%94%EC%99%80-%EB%B3%B5%ED%98%B8%ED%99%94-AesBytesEncryptor

 

암호화와 복호화, AesBytesEncryptor

암호화와 복호화, AesBytesEncryptor

velog.io

 

 

단방향 암호화 방식 (패스워드 암호화 시 사용)

평문을 암호문으로 암호화하는 것은 가능하지만 암호문을 평문으로 복호화하는 것은 불가능한 암호화 기법. 기본적으로 동일한 평문은 동일한 암호문으로 암호화되지만 이를 바탕으로 평문을 복원할수는 없다. 예를 들면 패스워드는 양방향 암호로 저장하는 것보다 단방향 암호로 저장하는 것이 안전하다. 암호화된 패스워드 목록이 털린다고 해도 이를 가지고 원래의 패스워드를 복원할 수 없고, 패스워드 자체를 검증할 때는 입력받은 값을 암호화해서 암호화한 값 끼리 비교하여 인증처리를 하곤한다. 
 
주로 Hash기법을 사용하며 최소한 SHA-256, 가능하면 SHA-3를 쓰는 것이 좋다. 나머지는 취약점이 발견된 상태며, 특히 MD5는 단시간 내에 충돌값을 찾아낼 수 있는 지경에 이르렀다. 패스워드 암호화에 아직도 MD-5를 사용하는 사이트가 있다면 즉시 탈퇴 처리해야한다.
 
123456 -> HASH -> "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"는 가능하지만, "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92" -> HASH -> 123456은 불가능

단방향 암호화 방식 (패스워드 암호화 시 사용)

기본적으로 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

  - 자세한 내용 참고 

728x90
반응형

'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