2017-12-01 16 views
1

계정이없는 사람들이 이메일 수신을 거부 할 수있는 웹 사이트가 있습니다. 이것은 "블랙리스트"테이블에 자신의 이메일 주소를 저장하고 일부 메일을 보내기 전에 검색 할 수 있습니다.차단 목록에 안전하게 이메일 저장

데이터 보호 및 보안상의 이유로 나는 이메일을 암호화/해쉬로 저장하고 싶습니다. 나는 단순한 md5(password)을 생각했다. 그러나 그것은 너무 쉽게 깨지기 쉽다. 두 번째 생각은 bcrypt/scrypt를 사용하여 느린 해시 함수를 사용하는 것이지만 각 항목에 대해 약간의 염분이 있으므로 비교할 모든 항목에 대해 메일을 해시해야합니다. 이것은 런타임이 O(n) 일 때 오히려 느릴 것이며, n은 블랙리스트 항목의 수입니다.

블랙리스트와 비교하기 위해 메일을 안전하게 해시하는 다른 방법이 있습니까? 얼마나 많은 항목이 있더라도 O(1) 런타임이어야합니다.

답변

1

PBKDF2 또는 BCrypt/SCrypt와 같은 키 유도 함수를 사용할 수 있습니다.

해시를 검색 할 수 있어야하므로 고유 한 임의 염분을 사용할 수 없습니다. 대신 서버 측 키 역할을하는 정적 소금을 전달할 수 있습니다.

KDF를 사용하면 무차별 대폭 강도를 크게 줄이는 비용 요소의 이점을 누릴 수 있습니다. 정적 salt/key는 공격자가 데이터베이스에 액세스 할 수 있지만 서버에 대한 권한이 없으면 (키가 비밀로 유지되는) brute-forcing을 방지합니다. 이는 SQL 주입의 일반적인 시나리오입니다. 소금이 해시 문자열의 일부가 아니 었는지 확인하십시오. 암호 해시 용으로 설계 되었기 때문에 BCrypt의 대부분의 구현에서이 작업을 수행합니다.

이 접근법의 문제점은 향후 빠른 하드웨어에 적용 할 수 없다는 것입니다. 그러나 KDF가 단지 몇 밀리 초가 필요할지라도 간단한 해시를 사용하는 것보다 낫습니다. 아마 Information Security에 물어봐야 할 수도 있습니다. 더 나은 대안을 알고있을 것입니다.