rhakdnj / kopring

0 stars 0 forks source link

인코딩, 해싱, 암호화간의 차이 #28

Open rhakdnj opened 7 months ago

rhakdnj commented 7 months ago

인코딩

인코딩은 데이터를 원래 형식에서 다른 형식으로 변환하는 것입니다.

인코딩에서는 키나 패스워드를 사용하지 않습니다.

인코딩은 가역적입니다. 텍스트를 인코딩한 후 실제 텍스트로 다시 바꿀 수 있습니다. 일반적으로 인코딩은 데이터 보안에 사용되지 않습니다. 즉, 목적이 데이터 보안이 아닙니다.

인코딩의 목적은 데이터를 압축하거나 스트리밍하는 것이 목적입니다.

인코딩은 데이터를 다른 형식으로 변환하는 것이고 데이터를 압축하거나 스트리밍할 때 사용합니다.

rhakdnj commented 7 months ago

해싱

해시는 데이터를 해시 문자열로 변환합니다.

단방향 프로세스이고 이는 비가역적입니다. 해시에서 원래 데이터를 구할 수 없습니다. 알고리즘을 이용해 데이터를 해시로 변환하고 나면 이 해시에서 원래 데이터를 구할 수 없습니다.

rhakdnj commented 7 months ago

암호화

복호화 알고리즘 + 데이터 암호화 키를 사용해 원래의 데이터로 돌아올 수 있습니다. 즉 가역적입니다.

rhakdnj commented 7 months ago

암호화는 데이터를 보호를 목적으로 합니다. 반면 인코딩은 데이터를 효율적으로 전송하거나 저장하는 것이 목적입니다.

해싱의 경우 데이터 무결성을 검증하는 것이 목적입니다.

rhakdnj commented 7 months ago

Spring Security에서 패스워드를 저장할 때 권장되는 방법은

1초를 워크 팩터로 적용해 적응형 단방향 함수를 사용하는 것입니다.

워크팩터

시스템에서 패스워드를 확인하는데 걸리는 시간을 의미합니다. 패스워드를 해싱하고 이것을 저장된 값과 비교하는 데 걸리는 시간입니다.

적응형 단방향 함수의 대표적인 예로는 bcrypt, scrypt, argon2 등이 있습니다.

PasswordEncoder라고 SpringSecurity Interface를 제공해서 Encoder라 하여 데이터를 넘기는 것에 포커스만 두는 것이 아닙니다. 우선적으로 해싱 이 포커스입니다.