2009-03-08 4 views
5

누군가가 의도적으로 두 파일을 수정하여 동일한 해시를 사용하려고 시도하는 경우이를 중단하는 방법은 무엇입니까? md5와 sha1이 대다수의 사건을 예방할 수 있습니까?의도적으로 해시가 동일한 두 개의 파일을 만드시겠습니까?

내 자신의 글을 쓰고 싶다고 생각했는데 사용자가 내 해시를 모른다면 내 일을 잘 할 수 없다고해도 내 자신을 속일 수는 없다고 생각합니다.

이 문제를 방지하는 가장 좋은 방법은 무엇입니까?

+0

달성하려는 목표는 무엇입니까? –

+0

두 번째 단락에서 나를 잃어 버렸습니까? –

답변

18

MD5는 해시 충돌이 주요 관심사 인 경우 일반적으로 안전하지 않은 것으로 간주됩니다. SHA1은 더 이상 미국 정부가 수용 할 수없는 것으로 간주됩니다. 인 경우 대체 해시 알고리즘을 찾기 위해 competition이 진행 중이지만 지금은 SHA2 제품군 (SHA-256, SHA-384 또는 SHA-512)을 사용하는 것이 좋습니다. [업데이트 : 2012-10-02 NIST은 을 알고리즘 Keccak으로 선택했습니다.]

당신은 자신의 해시를 만들려고 할 수 있습니다. 아마도 MD5만큼 좋지 않을 것이고 '무명을 통한 보안'도 마찬가지로 바람직하지 않습니다.

보안이 필요한 경우 여러 해시 알고리즘을 사용하여 해시합니다. 여러 알고리즘을 사용하여 해시 충돌이있는 파일을 동시에 만들 수 있다는 것은 지나치지 않습니다. [그리고 코멘트에 비추어 볼 때 해시 알고리즘을 결합하여 단일 값을 작성하지 않고 별도의 알고리즘을 사용하여 별도의 값을 생성하는 SHA-256 및 Whirlpool 값을 파일에 게시한다는 의미입니다. 일반적으로 손상된 파일은 알고리즘과 일치하지 않습니다. 누군가가 하나의 알고리즘을 사용하여 충돌 값을 생성 한 경우 다른 알고리즘 중 하나에서 두 번째 충돌을 생성 할 가능성은 무시할 수 있습니다.] Public TimeStamp은 알고리즘 배열을 사용합니다. 예를 들어, sqlcmd-86.00.tgz을 참조하십시오.

+0

MD5가 완전히 부러졌습니다. 그것은 쓰레기이고 새로운 시스템에서 절대로 사용해서는 안됩니다. 매우 긴 (> 512 비트) 해시가 필요한 경우에만 여러 해시 함수를 결합하는 것이 좋습니다. 그렇지 않으면 하나의 긴 해시가 강해집니다. SHA2-384는 예를 들어 SHA1과 RIPEMD-160이 연결된 것보다 충돌 기회가 적습니다. – kquinn

+2

보안에 관한 두 번째 부분은 사실이 아닙니다. 여러 해시 알고리즘을 결합하는 것은 상호 작용 방식에 대한 심층적 인 수학적 이해가 없어도 좋지 않습니다. 하나의 구멍은 다른 구멍에 의해 증폭 될 수 있습니다. –

+1

Public TimeStamp 웹 사이트에서 설명한 것은 SHA-256, RIPEMD-160, SHA1 및 Whirlpool hashes를 동시에 게시하는 것입니다. 같은 파일에 대해 4 개의 독립적 인 해시. 한 해시가 패배하더라도 같은 파일이 다른 파일을 우회 할 가능성은 무시할 수 있습니다. –

2

왜 자신의 해시 알고리즘을 만들려고합니까? SHA1HMAC의 문제점은 무엇입니까?

예, 해시가 반복됩니다.
일반 텍스트보다 짧은 해시는 반드시 정보가 부족합니다. 그것은 반복이있을 것이라는 것을 의미합니다. 해시의 핵심은 리피터가 리버스 엔지니어링하기 어렵다는 것입니다.

CRC32는 일반적으로 해시로 사용됩니다. 그것은 32 비트 양입니다. 우주에 2^32 개 이상의 메시지가 있기 때문에 CRC32가 반복됩니다. 동일한 아이디어가 다른 해시에도 적용됩니다.

+0

사실, CRC32로 충돌을 생성하는 것은 해시에 대한 2^31 평가보다 훨씬 쉽습니다. 이 해시에는 32 비트 보안에도 32 비트 SHA-512와 같은 "보안"32 비트 해시가 없습니다. –

1

"해시 충돌"이라고하며 이것을 피하는 가장 좋은 방법은 강력한 해시 함수를 사용하는 것입니다. here에서 볼 수 있듯이 MD5는 인위적으로 파일 충돌을 쉽게 만듭니다. 비슷하게 충돌하는 SH1 파일을 계산하는 데는 relatively efficient method이 있지만이 경우에는 "비교적 효율적"으로 계산 시간이 오래 걸리는 것으로 알려져 있습니다.

일반적으로 MD5 및 SHA1은 여전히 ​​크랙 비용이 있지만 불가능하지는 않습니다. 정말 걱정이된다면,보다 강력한 해시 함수를 사용하십시오 (예 : SHA256).

당신이 꽤 숙련 된 암호 작성자가 아니라면 실제로 글을 쓰는 것은 좋은 생각이 아닙니다. 대부분의 단순한 아이디어가 시도되었으며 잘 알려진 공격이있었습니다.

자세한 내용은 Schneier의 Applied Cryptography을 참조하십시오.

+0

Schneier는 평신도에게 책의 가치에 대한 예약을 표명했습니다. 이 인용문은 Applied Cryptography를 읽은 사람들이 작성한 잘못된 암호화 코드에 관한 내용입니다. 그러나 그것은 좋은 읽을 거리입니다. – dmckee

+1

피투성이의 세부 사항에 관심이 있다면 좋은 읽을 거리입니다. 슈나이어 (Schneier)의 예약은 주로 암호 해독에 관한 수학이 현대 암호의 가장 안전한 부분이라는 사실에 중점을 두었다.이 책은 실제 문제가있는 인간의 문제를 다루지 않는다. –

+0

@Bill : 예. 좋은 요약. – dmckee

0

나는 자신의 해시 알고리즘을 생각해내는 것이 좋은 선택이라고 생각하지 않습니다.

또 다른 좋은 옵션이 사용됩니다. 소금에 절인 MD5. 예를 들어 MD5 해시 함수의 입력에 MD5 함수에 전달하기 전에 "acidzom! @ #"문자열이 추가됩니다.

또한 Slashdot에 좋은 수치가 있습니다.

+3

이 답변은 오래된 것으로 알고 있지만 신속한 경고를 추가하려고 투표가 완료되었습니다. 첫째로, MD5가 고장 났고 소금으로 짠 것이 중단을 수정하지 못합니다. 소금물에는 특히 무지개 테이블을 저지하는 용도가 있지만 양쪽에 소금이 필요하기 때문에 여기서는 도움이되지 않습니다. 다른 세부 사항은 소금이 추가되지 않고 미리 붙여 져야한다는 것입니다. 그렇지 않으면 충돌하도록 설계된 한 쌍의 일반 텍스트를 구별하지 않습니다. 다른 사람들이 제안한 것처럼 SHA2 제품군에서 무언가를 사용하는 것이 좋습니다. –

4

사용자가 해시 알고리즘을 알지 못하는 경우 실제로 서명 한 문서의 서명도 확인할 수 없습니다.

가장 좋은 옵션은 공개 키 단방향 해시 알고리즘을 사용하여 가장 긴 해시를 생성하는 것입니다. SHA-256은 256 비트 해시를 생성하므로 위조자는 주어진 문서와 일치하는 문서를 만들기 전에 평균적으로 다른 문서를 개 시도해야합니다. 이는 매우 안전합니다. 아직 안전하지 않은 경우 SHA-512가 있습니다.

위조 된 디지털 서명 문서로부터 자신을 보호 할 수있는 좋은 방법은 단순히 서명 한 사본을 보관하는 것입니다. 이렇게하면 분쟁이 발생하면 서명 한 원본 문서가 변경되었음을 알 수 있습니다.

+0

생일 파라독스? 2^128, 제 생각에 ... 여전히, 엄청 많이 ... –

+1

지수를 2로 나누지 않으면 하나 씩 줄입니다. 따라서 256 대신 255가됩니다. –

+2

주어진 타겟을 매치시키고 충돌하는 쌍을 생성하려고합니다. 빌은 전 요나단에 대해 tlaking하고있다. – dmckee

2

여기에는 공격자에게 어려움이 있습니다. 주어진 해시와 일치하는 해시를 생성하는 것보다 동일한 해시를 가진 두 개의 파일을 찾는 것이 더 쉽고, 양식/콘텐츠/길이 제한을 존중할 필요가없는 경우 나중에 할 수 있습니다.

따라서 잘 정의 된 문서 구조와 길이를 사용할 수 있다면 사용하는 해싱 해시에 관계없이 공격자의 삶을 조금 더 어렵게 만들 수 있습니다.