저는 최근에 해싱에 대해 약간 읽고 있으며 AgileBits에 따르면 , 새 볼트 파일에서 “ PBKDF2 내의 SHA512 “를 사용합니다.
저는 Wikipedia에서 두 이름을 모두 살펴 봤고 PBKDF2가 키 파생 함수이고 SHA가 암호화라는 것을 알고 있습니다. 해시 함수를 사용했지만 차이점과 둘 다 서로 함께 사용되는 이유를 이해할 수 없습니다.
암호화 경험이없는 사람을 위해 이것을 설명 할 수있는 사람이 있습니까?
(필요한 경우 수학에 대해서만 알고 있다고 가정 할 수 있습니다.)
댓글
답변
SHA-512는 암호 적으로 안전한 해시 이며, PBKDF2는 암호 기반 키 파생 함수라고하는 것입니다. 결과 비밀이 “키로 사용되지 않고 해시 값으로 사용”되는 경우 암호 해시 라고도합니다. 암호 해시는 솔트와 작업 계수 / 반복 횟수를 포함한다는 점에서 보안 해시와 다릅니다.
암호 해시와 암호 해시는 둘 다 짧은 고정 크기의 출력을 생성하도록 설계된 한 가지 방법입니다. 주어진 입력. 암호 해시의 경우 입력은 암호와 솔트입니다. 솔트의 크기와 반복 횟수는 일반적으로 구성 매개 변수로 간주됩니다. 물론 둘 다 암호 해시의 출력에 영향을줍니다.
암호 해시는 일반적으로 의사 랜덤 함수 또는 PRF 위에 구축됩니다. PRF의 일반적인 형태는 HMAC 또는 해시 기반 메시지 인증 코드이며 내부적으로 해시를 사용합니다. HMAC와 같은 해시 기반 PRF를 사용하는 경우 사용되는 해시의 유형 / 크기를 구성 할 수있는 경우가 많습니다. 그러나 암호 해시는 해시를 사용하여 빌드 할 필요가 필요하지 않습니다 . 대칭 암호를 기반으로하는 것과 같은 다른 PRF도 가능합니다. 예를 들어 bcrypt는 블록 암호 인 Blowfish를 기반으로합니다.
암호 해시는 동일한 암호가 동일한 해시에 매핑되지 않도록 솔트가 필요합니다. 따라서 레인보우 테이블 (미리 계산 된 암호 포함 / 해시 쌍)이 유용하지 않습니다. 또한 공격자가 가능한 각 암호의 해시를 계산하기 위해 더 많은 작업을 수행해야 할 수 있도록 작업 계수 / 반복 횟수를 포함합니다. 대부분의 암호가 충분히 무작위가 아니기 때문에 필요합니다. 공격자는 무차별 대입 또는 사전 공격을 사용하여 가능한 방대한 양의 비밀번호를 테스트 할 수 있습니다.
댓글
- 더 많은 정보 여기 …하지만 ' 답변 공간에 맞지 않습니다.
답변
이전 질문에 대한 내 답변 을 바꾸려면 PBKDF2 는 일반적인 고수준 알고리즘으로 입력을 처리하기 위해 내부적으로 의사 난수 함수 (PRF)를 호출합니다. PBKDF2 사양은 특정 PRF를 요구하지 않으므로 구현자는 원하는 PRF를 자유롭게 선택할 수 있습니다 (보안 PRF의 정의를 충족하고 PBKDF2가 제공하는 입력을 받아 들일 수있는 한).
지금까지 PBKDF2 용 PRF의 가장 일반적인 선택은 HMAC 이며, 이는 내부적으로 사용하는 또 다른 고수준 구조입니다. 암호화 해시 함수 . 다시 말하지만, HMAC 사양은 특정 해시 기능을 요구하지 않으므로 * 구현자는 원하는 해시를 자유롭게 선택할 수 있습니다. 아마도 오늘날 가장 일반적인 선택은 SHA-256 및 SHA-512를 포함하는 SHA-2 해시 제품군 중 하나입니다.
따라서 “PBKDF2 내의 SHA512″는 “PRF로 HMAC와 함께 PBKDF2를 사용하고 HMAC 내의 해시로 SHA-512를 사용하고 있음을 의미합니다. **
혼란 스러울 수있는 것은 이 PBKDF2-with-HMAC-with-SHA512는 일반 SHA-512와 매우 유사한 작업을 수행하는 것처럼 보일 수 있습니다. 둘 다 임의의 암호를 입력으로 받아 원래 암호가 불가능한 의사 난수 비트 문자열로 변환합니다. 쉽게 재구성 될 수 있습니다.그러나 실제로 몇 가지 차이점이 있습니다. 가장 중요한 점은 다음과 같습니다.
-
SHA-512는 빠릅니다. 매우 빠릅니다. PBKDF2는 계산 속도가 고의적으로 느리고 반복 횟수 매개 변수를 조정하여 속도를 제어 할 수 있습니다.
-
속도의 직접적인 결과로 SHA -512만으로는 hashcat 과 같은 소프트웨어를 사용하는 무차별 암호 추측 공격에 취약합니다.이 소프트웨어는 단순히 많은 암호를 생성하고 일치하는 해시를 생성하는 암호를 찾을 때까지 해시합니다. . 단일 최신 CPU는 초당 수백만 개의 암호를 쉽게 해시 할 수 있으며 GPU는 훨씬 더 빠릅니다.
또한 주목할만한 몇 가지 다른 사소한 차이점이 있습니다.
-
PBKDF2는 입력 비밀번호가 아닌 경우에도 출력이 고유한지 확인하는 데 사용할 수있는 “salt”매개 변수를 사용합니다. . (솔트를 사용하면 공격자가 솔트를 알기 전에 추측 된 암호를 유용하게 해싱 할 수 없기 때문에 사전 계산 기반 공격을 방지 할 수 있습니다.) SHA-512 자체에는 솔트 개념이 없지만 동일한 효과를 얻을 수 있습니다. 암호 앞에 솔트를 추가합니다.
-
SHA-512는 항상 512 비트 출력 (따라서 이름)을 생성합니다.하지만 다음과 같은 경우에는 항상 더 짧은 길이로자를 수 있습니다. 전체 512 비트가 필요하지 않습니다. PBKDF2는 원칙적으로 모든 길이의 출력을 생성 할 수 있지만 실제로는 이를 사용하여 하나 이상의 내부 해시 출력을 생성합니다. 비트는 권장되지 않습니다 .
*) 원래 HMAC 정의 및 보안 증명은 사용 된 해시 함수가 특정 Merkle–Damgård 해시 함수 로 알려진 유형입니다. 실제로 SHA-2 제품군을 포함하여 지난 수십 년 동안 가장 많이 사용 된 암호화 해시 함수는 모두 이러한 유형 이었으므로이 제한은 실제로 큰 문제가되지 않았습니다. 이는 Merkle–Damgård 해시가 아닌 SHA-3 (일명 Keccak)의 표준화로 점차 변경 될 수 있지만 편리하게는 자체 HMAC-SHA3에 대한 보안 클레임 이 함께 제공됩니다.
**) 벌금입니다. 전통적인 선택입니다. scrypt 또는 Argon2와 같은 최신 KDF만큼 GPU 기반 및 기타 병렬 공격에 대한 저항력이 없습니다. 이 될 것이지만, 그것은 여전히 평범하고 반복되지 않은 해싱보다 훨씬 낫습니다. 즉, 보안을 제대로 평가하려면 PBKDF2에 사용되는 반복 횟수도 알아야합니다. 안타깝게도 많은 PBKDF2 구현은 기존의 “권장 최소값”인 1000 회 반복을 사용하는 경향이 있습니다. 이는 오늘날 속도 범프에 불과합니다. 개인적으로 최신 CPU에서는 100 만 또는 1,000,000,000 번에 가까운 반복 을 선호합니다.
댓글
- 질문 : PBKDF2는 추측 횟수를 줄이는 데만 사용됩니까 (무차별 공격 인 경우)? 아니면 염두에 두어야 할 다른 세부 사항이 있습니까?
- @NaveenNiraula : 무차별 대입 추측 속도를 늦추는 것 외에도 PBKDF2는 임의의 길이와 형식의 암호를 균일 한 의사 난수 비트 문자열로 변환하는 2 차 목적을 가지고 있습니다. 그러나 일반 해싱만으로도이를 수행 할 수 있습니다. 또한 salt 매개 변수를 사용하면 동일한 암호에서 여러 개의 고유 한 키를 얻을 수 있습니다. 암호를 사용하고 " 레인보우 테이블 "과 같은 사전 계산 된 사전을 사용하여 일부 공격을 방지합니다. 그러나 다시 말하지만 ' PBKDF2의 보호를 추측하는 무차별 대입이 필요하지 않습니다.이를 위해 일반 HMAC를 사용하거나 해싱하기 전에 솔트를 암호와 연결하기 만하면됩니다. 그것입니다.
PBKDF2(HMAC_SHA512, password, ...)
와 비슷합니다.