솔트 (암호화)이란 무엇인가요?
암호화 솔트는 해시 함수나 키 파생 함수가 처리하기 전에 패스워드나 다른 입력과 결합하는 무작위 값으로, 동일한 입력이 다른 출력을 생성하도록 보장하고 사전 계산된 공격 테이블을 무력화한다.
다른 이름: salt, cryptographic salt
솔트 없이는 동일한 패스워드가 항상 동일한 해시를 생성한다. 일반적인 패스워드를 해시 값에 매핑한 사전 계산된 테이블(레인보우 테이블)을 가진 공격자는 도난된 데이터베이스에서 일치하는 해시를 즉시 조회할 수 있다. 솔팅은 해싱 전에 각 패스워드에 고유한 무작위 값을 혼합하여 이 공격을 방지한다. 두 사용자가 동일한 패스워드를 가져도 서로 다른 솔트가 서로 다른 해시 출력을 보장한다.
솔트는 비밀일 필요가 없다. 일반적으로 해시 또는 파생 키와 함께 평문으로 저장된다. 목적은 사전 계산된 테이블을 사용하는 대신 공격자가 각 해시를 개별적으로 계산하도록 강제하는 것이다. 16바이트 무작위 솔트는 각 패스워드에 대해 2^128가지 가능한 변형을 제공하여 사전 계산을 완전히 비실용적으로 만든다.
솔트는 두 가지 맥락에서 필수적이다. 패스워드 해싱(데이터베이스에 저장된 패스워드 해시를 보호하는 곳)과 키 파생(동일한 패스프레이즈가 서로 다른 연산에서 다른 파생 키를 생성하도록 보장하는 곳)이다. 두 경우 모두 솔트는 암호학적으로 안전한 난수 생성기를 사용하여 생성해야 하며 연산당 고유해야 한다. 사용자나 암호화 연산 전반에 걸쳐 재사용해서는 안 된다.
Vaulted가 솔트 (암호화)을 사용하는 방법
Vaulted 비밀에 패스프레이즈를 추가하면 Web Crypto API를 사용하여 클라이언트 측에서 무작위 16바이트 솔트가 생성된다. 이 솔트는 패스프레이즈 및 100,000회 반복과 함께 PBKDF2에 입력되어 AES-KW 래핑 키를 파생한다. 그런 다음 솔트는 URL 프래그먼트에 포함되어 수신자의 브라우저가 패스프레이즈에서 동일한 래핑 키를 재파생할 수 있게 한다. 패스프레이즈가 있는 각 비밀은 자체 고유한 솔트를 받아, 서로 다른 비밀에 사용된 동일한 패스프레이즈가 다른 래핑 키를 생성하도록 보장한다.