결론 : SHA-1은 사전 이미지 공격에 대비하여 안전하지만 계산하기가 쉬우므로 무차별 대입 또는 사전 공격을보다 쉽게 수행 할 수 있습니다. (SHA-256과 같은 후속 작업에서도 마찬가지입니다.) 상황에 따라 계산 비용이 많이 드는 (예 : bcrypt) 해시 함수가 더 나은 선택 일 수 있습니다.
어떤 사람들은 "SHA-1이 고장났습니다"와 같은 말을 많이 던지므로 정확히 그 의미를 이해하려고합니다. SHA-1 암호 해시 데이터베이스가 있고 공격자가 최신 SHA-1 차단 알고리즘을 사용하고 100,000 대의 컴퓨터가있는 봇넷에 액세스한다고 가정 해 봅시다. (100k 가정용 컴퓨터를 제어 할 수 있다는 것은 초당 약 10 ^ 15 작업을 수행 할 수 있음을 의미합니다.)
- 한 사용자의 비밀번호를 찾으십니까?
- 주어진 사용자의 비밀번호를 찾으십니까?
- 모든 사용자의 비밀번호를 찾으십니까?
- 사용자 중 하나로 로그인하는 방법을 찾으십니까?
- 특정 사용자로 로그인하는 방법을 찾으십니까?
암호가 소금에 절인 경우 어떻게 변경됩니까? 염장 방법 (접두사, 접미사, 둘 다 또는 xoring과 같이 더 복잡한 것)이 중요합니까?
인터넷 검색 후 내 현재 이해가 있습니다. 내가 잘못 이해 한 경우 답변을 수정하십시오.
- 소금이 없으면 무지개 공격은 즉시 모든 암호를 찾습니다 (매우 긴 암호는 제외).
- 임의의 소금이 충분히 길면 암호를 찾는 가장 효과적인 방법은 무차별 대입 또는 사전 공격입니다. 충돌이나 사전 이미지 공격은 실제 암호를 찾는 데 도움이되지 않으므로 SHA-1에 대한 암호화 공격은 도움이되지 않습니다. 어떤 알고리즘을 사용하든 중요하지 않습니다. MD5 또는 MD4를 사용할 수도 있고 암호도 안전합니다 (SHA-1 해시 계산 속도가 느리기 때문에 약간의 차이가 있습니다).
- "안전한"안전성을 평가하기 위해 단일 sha1 실행에는 1000 회의 작업이 수행되고 비밀번호에는 대문자, 소문자 및 숫자 (즉, 60 자)가 포함되어 있다고 가정합니다. 이는 공격자 가 하루에 10 15 * 60 * 60 * 24 / 1000 ~ = 10 17 잠재적 암호를 테스트 할 수 있음을 의미합니다 . 무차별 대입 공격의 경우, 3 시간 동안 최대 9 자, 일주일에 최대 10 자, 1 년에 최대 11 자까지 모든 암호를 테스트해야합니다. (추가 문자마다 60 배가 걸립니다.) 사전 공격은 훨씬 빠르며 (단일 컴퓨터를 보유한 공격자는 몇 시간 내에 해체 할 수 있음), 약한 암호 만 찾습니다.
- 사용자로 로그인하기 위해 공격자는 정확한 암호를 찾을 필요가 없습니다. 동일한 해시를 일으키는 문자열을 찾는 것으로 충분합니다. 이것을 첫 번째 사전 이미지 공격이라고합니다. 내가 아는 한 SHA-1에 대한 사전 이미지 공격은 없습니다. (A bruteforce 공격이 걸릴 것이다 (160) 이론적 공격자가 열 필요가 의미하는 작업을 30 그것을 해내 년. 이론적 가능성의 한계는 약 2 명이다 (60) 작업, 공격이 몇 년이 걸릴 것이다에있다.)가 있습니다 프리 이미지 공격 무시할만한 효과가있는 SHA-1의 축소 된 버전에 대비 (80 대신 44 단계를 사용하는 SHA-1이 감소 된 경우 공격 시간이 2160 작업에서 2157으로 감소 함)). SHA-1에 대한 충돌 공격은 이론상 가능한 범위 내에 있습니다 (내가 찾은 최선 의 시간이 2 80 에서 2 52 로 줄어 들었습니다 ).하지만 소금이 없어도 암호 해시에는 쓸모가 없습니다.
요컨대 SHA-1로 암호를 저장하면 완벽하게 안전 해 보입니다. 내가 뭐 놓친 거 없니?
업데이트 : 마르셀로 언급 기사 지적 이의 두 번째 프리 이미지 공격 (106) 작업을 . ( 편집 : Thomas가 설명 했듯이 ,이 공격은 실제 시나리오에는 적용되지 않는 가설적인 구성입니다.) 그래도 SHA-1을 주요 파생 함수로 사용하는 데 위험을 초래하는 방법을 여전히 알지 못합니다. 충돌 공격 또는 두 번째 사전 이미지 공격이 결국 첫 번째 사전 이미지 공격으로 전환 될 수 있다고 생각할만한 충분한 이유가 있습니까?