英雄背景无分隔线
指南

비밀번호 저장

애플리케이션이 사용자를 인증하는 경우 암호도 처리할 가능성이 높습니다.

사용자 암호를 처리하는 것은 매우 중요한 일이며 적절하게 처리하는 것은 훨씬 더 큰 문제입니다.

응용 프로그램이 공격을 받고 모든 사람이 볼 수 있도록 인터넷을 통해 사용자 암호가 유출되는 것보다 더 나쁜 시나리오는 상상하기 어렵습니다.개인적으로 우리는 그 생각에 마음이 떨립니다.그렇다면 모범 사례에 따라 암호를 어떻게 안전하게 저장할 수 있을까요?몇 가지 방법을 살펴보겠습니다.

암호화와 해싱

표면적으로는 암호화가 안전한 암호 저장을 위한 괜찮은 솔루션처럼 들리지만 암호화에 전적으로 의존하는 것은 다소 문제가 될 수 있습니다.

암호화는 기본적으로 양방향 기능입니다. 즉, 암호가 암호화될 수 있는 것처럼 암호화도 가능합니다. 암호 해독.완벽하게 논리적이죠, 그렇죠?아니면 사용자 비밀번호가 데이터베이스에 저장된 비밀번호와 일치하는지 어떻게 확인할 수 있을까요?

따라서 암호를 해독하는 기능 또한 상당히 큰 부담입니다.누군가 서버를 손상시켜 암호 암호를 얻게 되면 암호 해독에 필요한 핵심 자료도 얻을 수 있을 가능성이 높습니다.

반면 해싱은 단방향 특성 때문에 암호에 훨씬 더 적합합니다.일단 해시한 후에는 암호문을 원래의 일반 텍스트로 직접 되돌릴 수 있는 기능이 없습니다.이 속성 덕분에 해시는 암호 보호에 매우 적합합니다.

모든 해시가 똑같이 생성되는 것은 아닙니다.

저장용 암호를 해싱하기로 결정했다면 해시 함수를 적용하고 하루에 호출하는 것만큼 간단하지 않습니다.

해시는 모양과 크기가 다양하며, 지난 10년간 컴퓨팅 기술이 발전했기 때문에 대부분의 해시는 암호 저장에 적합하지 않습니다.

앞서 언급했듯이 해시는 단방향 함수이므로 되돌릴 수 없습니다.엄밀히 따지자면 해싱은 결정론적이기도 하지만, 해싱은 공격자가 충분한 시간과 리소스가 주어지면 잠재적으로 해시를 원본 일반 텍스트로 되돌릴 수 있는 무차별 대입 전술의 영향을 받기 쉽습니다.

이러한 이유로 해싱 함수를 두 가지 범주로 나눕니다.

  • 암호화 해시
  • 비밀번호 해시
特点 加密哈希值 密码散列
速度 非常快 有意放慢速度
工作系数可以调整 没有

암호 해시의 주요 특징은 해시를 계산하는 데 드는 노력을 정의하는 “작업 요소" (단일 정수 또는 여러 매개 변수) 가 있다는 것입니다.

수년에 걸쳐 CPU와 GPU의 속도가 빨라지면서 소비자 하드웨어의 해시에 대해 대규모 무차별 대입 공격을 수행하는 것이 더 쉬워졌습니다. 이는 시간이 지남에 따라 해시의 안전성이 점점 떨어질 수 있음을 의미합니다.

“작업 요소”는 업계 동향을 따르는 방식으로 해시를 저장하는 데 사용됩니다.하드웨어가 더 빨라지면 해시를 해독하는 데 더 많은 시간과 노력이 들도록 알고리즘의 작업 인자를 늘립니다.현대 하드웨어의 경우 100ms를 예로 들어 보겠습니다.

즉, 실제로는 2-3 년마다 작업 요소를 늘려야 할 수도 있습니다.

加密哈希值 密码散列
MD5 bcrypt
SHA-1 加密
SHA-2 PBKDF2
SHA-3 氩2