어떤 암호화 해시 기능을 선택해야합니까?


137

.NET 프레임 워크에는 6 가지 해시 알고리즘이 제공됩니다.

  • MD5 : 16 바이트 (500MB 해시 시간 : 1462ms)
  • SHA-1 : 20 바이트 (1644ms)
  • SHA256 : 32 바이트 (5618ms)
  • SHA384 : 48 바이트 (3839ms)
  • SHA512 : 64 바이트 (3820ms)
  • RIPEMD : 20 바이트 (7066ms)

이러한 기능은 각각 다르게 수행됩니다. MD5가 가장 빠르며 RIPEMD가 가장 느립니다.

MD5는 내장 Guid 유형에 적합하다는 이점이 있습니다. 그리고 이것은 유형 3 UUID의 기초입니다 . SHA-1 해시는 유형 5 UUID의 기초입니다. 식별에 사용하기가 정말 쉽습니다.

그러나 MD5는 충돌 공격에 취약하고 SHA-1도 취약하지만 덜 취약합니다.

어떤 조건에서 어떤 해싱 알고리즘을 사용해야합니까?

대답이 궁금한 특정 질문은 다음과 같습니다.

  • MD5를 신뢰할 수 없습니까? 악의적 인 의도없이 MD5 알고리즘을 사용하고 악의적 인 의도를 가지고 있지 않은 MD5 알고리즘을 사용하는 정상적인 상황에서는 모든 충돌을 예상 할 수 있습니다 (두 개의 임의 바이트 []가 동일한 해시를 생성 함)

  • SHAPE보다 RIPEMD가 얼마나 낫습니까? (더 나은 경우) 계산하는 데 5 배 느리지 만 해시 크기는 SHA1과 같습니다.

  • 파일 이름 (또는 다른 짧은 문자열)을 해시 할 때 악성이 아닌 충돌이 발생할 가능성은 무엇입니까? (예 : 동일한 MD5 해시를 가진 2 개의 임의 파일 이름) (MD5 / SHA1 / SHA2xx 사용) 일반적으로 악성이 아닌 충돌의 가능성은 무엇입니까?

이것은 내가 사용한 벤치 마크입니다.

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void Main(string[] args) {

        var md5 = new MD5CryptoServiceProvider();
        var sha1 = new SHA1CryptoServiceProvider();
        var sha256 = new SHA256CryptoServiceProvider();
        var sha384 = new SHA384CryptoServiceProvider();
        var sha512 = new SHA512CryptoServiceProvider();
        var ripemd160 = new RIPEMD160Managed();

        var source = GetRandomBytes(1000 * 1024);

        var algorithms = new Dictionary<string,HashAlgorithm>();
        algorithms["md5"] = md5;
        algorithms["sha1"] = sha1;
        algorithms["sha256"] = sha256;
        algorithms["sha384"] = sha384;
        algorithms["sha512"] = sha512;
        algorithms["ripemd160"] = ripemd160;

        foreach (var pair in algorithms) {
            Console.WriteLine("Hash Length for {0} is {1}", 
                pair.Key, 
                pair.Value.ComputeHash(source).Length);
        }

        foreach (var pair in algorithms) {
            TimeAction(pair.Key + " calculation", 500, () =>
            {
                pair.Value.ComputeHash(source);
            });
        }

        Console.ReadKey();
    }

15
md5가 GUID (16 바이트) 형식에 적합하다는 사실은 근본적인 오해를 암시합니다. 해시는 고유하다고 보장되지는 않지만, 드물고 (암호 적 의미로 사용되는 경우 위조하기 어렵습니다) GUID가 독창적이지만 GUID의 내용과 관련이없는 해시 인 것에서 파생됩니다. 그것이 식별하는 것. 그것들은 매우 다른 목적으로 사용됩니다.
Barry Wark

1
관련이없는 간단한 구현 특정 사실을 수정하십시오. 나는 당신이 16 바이트에 무한대를 맞출 수 없다는 것을 이해합니다. 모든 해싱 알고리즘과 충돌을 일으킬 수 있습니다
Sam Saffron

5
또한 Guid는 실제로 실제로 독특합니다. 이론적으로 Guid를 계속 생성하면 결국 복제본을 얻게됩니다.
Sam Saffron

3
GUID가 적합하더라도 해시를 실제로 넣지 않아야합니다 . 가장 간단한 예 : 동일한 파일의 두 복사본에는 다른 GUID가 있지만 동일한 해시가 있어야합니다. 사람 이름의 처음 8 글자는 16 바이트에도 잘 맞습니다.
dbkk

2
@ user2332868 SHA-1의 중단은 우연한 충돌 가능성에 영향을 미치지 않습니다 . 악의적 인 의도가 귀하의 사용에 위협이되는 경우, 맹목적으로 해시 함수를 잘못 선택하는 것은 잘못된 것이므로 특정 사례에 대한 위험 / 비용 분석에 시간을 투자해야한다고 생각합니다.
Andrey Tarantsov

답변:


138

암호화에서 해시 함수는 세 가지 별도의 함수를 제공합니다.

  1. 충돌 저항 : 두 개의 메시지 (찾을 수있는 사람을 얼마나 열심히 있는 두 개의 메시지) 그 해시 동일합니다.
  2. Preimage Resistance : 해시가 주어지면 동일한 해시를 가진 다른 메시지를 찾기가 얼마나 어렵습니까? 단방향 해시 함수 라고도 합니다 .
  3. 두 번째 사전 이미지 저항 : 메시지가 주어지면 동일한 해시 메시지를 찾으십시오.

이러한 속성은 관련이 있지만 독립적입니다. 예를 들어 충돌 저항은 두 번째 사전 이미지 저항을 의미하지만 반대의 경우는 아닙니다. 특정 응용 프로그램에 대해 이러한 속성 중 하나 이상이 필요한 다른 요구 사항이 있습니다. 서버에서 비밀번호를 보호하기위한 해시 기능은 일반적으로 사전 이미지 저항 만 필요하며 메시지 요약에는 세 가지가 모두 필요합니다.

그러나 MD5는 내 충격성이 아니라 내 충격성이 요구되지 않는 응용 분야에서의 사용을 배제하지 않는 것으로 나타났습니다. 실제로 MD5는 키 크기와 속도가 작은 응용 프로그램에서 여전히 사용됩니다. 즉, 결함으로 인해 연구자들은 새로운 시나리오에서 다른 해시 함수를 사용할 것을 권장합니다.

SHA1에는 이론적으로 길이가 긴 보안 해시 함수에 필요한 2 ^ 80 단계보다 적은 충돌이 발견 될 수있는 결함이 있습니다. 공격은 지속적으로 수정되고 있으며 현재 ~ 2 ^ 63 단계로 수행 할 수 있습니다. 현재 컴퓨팅 영역 내에서는 거의 없습니다. 이러한 이유로 NIST는 2010 년 이후에 SHA2 제품군을 사용해야한다는 SHA1 사용을 단계적으로 폐지하고 있습니다.

SHA2는 SHA1에 따라 생성 된 새로운 해시 함수 제품군입니다. 현재 SHA2 기능에 대한 알려진 공격은 없습니다. SHA256, 384 및 512는 모두 서로 다른 키 길이를 사용하는 SHA2 제품군의 일부입니다.

RIPEMD 나는 SHA 가족만큼 일반적으로 사용되지 않으므로 암호 연구자들에 의해 면밀히 조사되지 않았다는 점을 제외하고는 너무 많이 언급 할 수 없습니다. 이러한 이유로 SHA 기능을 사용하는 것이 좋습니다. 사용중인 구현에서는 꽤 느리게 보이므로 유용하지 않습니다.

결론적으로 최상의 기능은 없습니다. 모두 필요한 기능에 따라 다릅니다. 각각의 결점을 염두에 두면 시나리오에 적합한 해시 기능을 가장 잘 선택할 있습니다.


1
이 수준의 세부 사항에 참여해 주셔서 감사합니다. 이것은 매우 도움이됩니다.
joelc

1
일부 응용 프로그램의 경우 비 암호 등급 해시 기능조차도 적합 할 수 있습니다. OP는 암호, 챌린지-응답 인증, 액세스 토큰 또는 여러 문자열 / 파일의 색인을 위해 특별히 언급 된 적이 없었습니다. 반면, 성능은 OP에 대한 관심사입니다.
Seva Alekseyev

111

모든 해시 함수가 "손상됨"

비둘기 집 원리는 (당신이 비둘기를 잘라하지 않는 한) 당신이이 개 구멍에 2 개 이상의 비둘기 맞지 않는 것 같은 하드로 그 시도를 말한다. 마찬가지로 2 ^ 128 슬롯에 2 ^ 128 + 1 개의 숫자를 넣을 수 없습니다. 모든 해시 함수는 유한 크기의 해시를 생성하므로 "유한 크기"+ 1 시퀀스를 통해 검색하면 항상 충돌을 찾을 수 있습니다. 그렇게 할 수는 없습니다. MD5 및 Skein이 아닙니다 .

MD5 / SHA1 / Sha2xx는 우연의 충돌이 없습니다

모든 해시 함수에는 충돌이 있습니다. 우연히 이러한 충돌을 겪는 것은 은하계 복권에서 당첨되 는 것과 같습니다 . 다시 말해, 아무도 은하 간 복권 에서 당첨 되지 않으며, 복권이 작동하는 방식이 아닙니다. 실수로 MD5 / SHA1 / SHA2XXX 해시를 우연히 만나지 않을 것입니다. 모든 사전의 모든 언어에서 모든 단어는 다른 값으로 해시됩니다. 전체 행성의 모든 컴퓨터에있는 모든 경로 이름은 다른 MD5 / SHA1 / SHA2XXX 해시를 갖습니다. 내가 어떻게 알 수 있는지 물어보십시오. 글쎄, 내가 전에 말했듯이, 아무도 은하계 복권에서 당첨되지 않습니다.

그러나 ... MD5가 고장났습니다.

때때로 그것의 깨진 사실은 중요하지 않습니다 .

MD5에 대해서는 알려진 사전 이미지 또는 두 번째 사전 이미지 공격 이 없습니다 .

MD5와 관련하여 어떤 문제가 발생했을까요? 타사가 2 개의 메시지를 생성 할 수 있습니다. 그 중 하나는 EVIL이고 다른 하나는 동일한 값으로 해시되는 GOOD입니다. ( 충돌 공격 )

그럼에도 불구하고 현재 RSA 권장 사항은 사전 이미지 저항이 필요한 경우 MD5를 사용하지 않는 것입니다. 사람들은 보안 알고리즘과 관련하여주의를 기울이는 경향이 있습니다.

.NET에서 어떤 해시 함수를 사용해야합니까?

  • 속도 / 크기가 필요하고 생일 공격이나 사전 이미지 공격에 신경 쓰지 않으면 MD5를 사용하십시오.

나 후에 이것을 반복하십시오, MD5 충돌 가능성은 없습니다 , 악의적 인 충돌은 신중하게 설계 될 수 있습니다. MD5에서 현재까지 알려진 사전 이미지 공격은 없지만 보안 전문가의 말에 따르면 사전 이미지 공격을 방어해야하는 경우 MD5를 사용해서는 안됩니다. SAME는 SHA1로갑니다 .

모든 알고리즘이 사전 이미지 또는 충돌 공격을 방어 할 필요는 없습니다. HD에서 중복 파일에 대한 첫 번째 패스 검색의 사소한 경우를 생각해보십시오.

  • 암호로 안전한 해시 기능을 원하면 SHA2XX 기반 기능을 사용하십시오.

아무도 SHA512 충돌을 발견하지 못했습니다. 이제까지. 그들은 정말 열심히 노력했습니다. 그 문제로 인해 아무도 SHA256 또는 384 충돌을 발견하지 못했습니다. .

  • 상호 운용성 시나리오가 아닌 경우 SHA1 또는 RIPEMD를 사용하지 마십시오.

RIPMED는 SHAX 및 MD5와 동일한 양의 정밀 조사를받지 못했습니다. SHA1과 RIPEMD는 생일 공격에 취약합니다. 그들은 .NET에서 MD5보다 느리고 어색한 20 바이트 크기로 제공됩니다. 이 기능을 사용하는 것은 의미가 없습니다. 잊어 버리십시오.

SHA1 충돌 공격은 2 ^ 52로 내려 가며 SHA1 충돌이 발생할 때까지 너무 오래 걸리지 않습니다.

다양한 해시 함수에 대한 최신 정보 는 해시 함수 zoo를 살펴보십시오 .

그러나 더 기다립니다

빠른 해시 기능 을 갖는 것은 저주가 될 수 있습니다. 예를 들어, 해시 함수의 가장 일반적인 사용법은 암호 저장입니다. 기본적으로 알려진 임의 문자열과 함께 암호 해시를 계산하고 (무지개 공격을 막기 위해) 해시를 데이터베이스에 저장합니다.

문제는 공격자가 데이터베이스 덤프를 얻는 경우 무차별 대입을 사용하여 암호를 효과적으로 추측 할 수 있다는 것입니다. 그가 시도하는 모든 조합은 단지 밀리 초 만 걸리며 초당 수십만 개의 암호를 시험해 볼 수 있습니다.

이 문제를 해결하기 위해 bcrypt 알고리즘을 사용할 수 있으며, bcrypt를 사용하여 시스템을 공격하는 경우 공격자가 크게 느려지도록 느리게 설계되었습니다. 최근에 scrypt 는 약간의 헤드 라인을 만들었으며 일부 사람들bcrypt 보다 더 효과적이라고 생각하지만 .Net 구현에 대해서는 알지 못합니다.


MD5와 SHA-1이 모두 약화되었지만 MD5는 SHA-1보다 훨씬 약하지만 약간 더 빠릅니다. 실제 MD5 충돌이 발견되어 실제 익스플로잇 (CA 인증서 위조)에 사용되었지만 실제 SHA-1 충돌이 발견되지 않는 한 (무작위로 인해 작업 수가 상당히 줄었음에도 불구하고) 알고 있습니다. 그리고 MD5가 얼마나 약한 지 감안할 때 SHA-1보다 MD5에 대해 두 번째 사전 이미지 공격이 더 빨리 나타나는 경우 놀라지 않을 것입니다. 따라서 충돌 저항이 아닌 속도가 필요한 경우 SHA-1을 사용해야하며, 그렇지 않으면 SHA-2 제품군 중 하나를 사용해야한다고 생각합니다.
Brian Campbell

1
@Brian은 향후 몇 년 내에 사람들이 SHA1에 대한 충돌 공격을 실행할 수 있다는 점을 분명히 알았습니다. 이는 SHA1을 MD5만큼 유용하게 사용할 것입니다 .CA 인증서는 충돌 공격입니다. SHA1 CA 인증서에 대해 동일한 공격을 실행합니다. 공격은 EVIL 및 GOOD 인증서를 생성하는 악의적 인 당사자에 따라 다릅니다. MD5에 대한 알려진 초기 공격은 없으며 충돌 공격이 발생하여 사전 이미지 공격이 발생 가능성을 높이 지 않습니다.
Sam Saffron

암호에 사용하는 해시보다 해시되는 것보다 훨씬 적습니다. 소금이 알려진 경우 데이터베이스는 즉시 사전 공격에 취약합니다. 소금이 절차 적이며 파일 시스템이 손상된 경우 (다시) 취약합니다. 소금이 생략되면 다시 타협됩니다. 문제의 보안은 무엇이든 해시됩니다. 인증서, 프로그래머 (IE, 작성, 이해 등)로 다루지 않았기 때문에 다루지 않을 것입니다.
Robert K

깨진이라는 용어는 해싱과 관련하여 특정한 의미를 지니고 있으며,이 답변이 강조하는 의미는 아닙니다. 이 모든 대답은 혼란을 일으키는 것입니다.
Joel McBeth

1
실용성에 중점을두기 때문에 훌륭한 답변입니다. 해시는 보안 이외의 용도로 사용됩니다 (예 : 민감하지 않은 데이터에 대한 캐시 조회 키 생성 또는 직렬화 된 객체의 변경 여부 판별). 표적 공격의 가능성은 거의 제로 (절대로 말하지는 않음)이며, 공격이 성공하더라도 실질적인 영향은 없습니다. 실제적인 (이론적 인) 영향에 중점을 둔 우수한 직업.
DVK

35

최신 정보:

시간이 바뀌었고 SHA3 우승자가 있습니다. SHA3 ​​컨테스트의 keccak (일명 SHA3 ) 우승자를 사용하는 것이 좋습니다 .

원래 답변 :

가장 약한 것부터 가장 강한 것까지 :

  1. RIPEMD BROKEN, 이 pdf에서 볼 수 있듯이 절대 사용해서는 안됩니다
  2. MD-5 BROKEN, 절대 사용하지 말 것, 랩탑으로 2 분 안에 파손될 수 있음
  3. SHA-1 BROKEN, 절대 사용해서는 안 됨, 원칙적으로 손상됨, 주별 공격 수 증가
  4. SHA-2 약, 아마 앞으로 몇 년 안에 깨질 것입니다. 몇 가지 약점이 발견되었습니다. 일반적으로 키 크기가 클수록 해시 기능이 더 어려워집니다. 키 크기 = 강도가 항상 사실은 아니지만 대부분 사실입니다. 따라서 SHA-256은 아마도 SHA-512보다 약할 것입니다.
  5. Skein NO KNOWN WEAKNESSES 는 SHA-3 후보입니다 . 상당히 새롭고 테스트되지 않았습니다. 많은 언어로 구현되었습니다.
  6. MD6 NO KNOWN WEAKNESSES는 SHA-3의 또 다른 후보입니다. 아마도 Skien보다 강력하지만 단일 코어 시스템에서는 느립니다. Skien처럼 테스트되지 않았습니다. 일부 보안을 염두에 둔 개발자는 미션 크리티컬 역할 에서이를 사용하고 있습니다.

개인적으로는 MD6을 사용합니다. 왜냐하면 절대 편집증이 될 수 없기 때문입니다. 속도가 진짜 관심사라면 Skein 또는 SHA-256을 살펴볼 것입니다.


5
나는 Skein과 MD6를 그 목록에 높게 두지 않을 것입니다. SHA-3 경쟁이 2012 년 말까지 완료되지 않는 이유가 있습니다. 해시 함수가 실제로 안전 할 것으로 확신하고 이러한 함수 중 어느 것도 확신하지 못하는 데 오랜 시간이 걸리고 많은주의가 필요합니다 아직까지는 충분히 오래있었습니다.
Eric Burnett

나는 당신의 감정에 동의하지만, 나는 공동체가 이상한 입장에 있다고 생각합니다. 사용중인 모든 해시 함수가 위험에 처할 수 있습니다 (SHA2 256-512가 아닐 수도 있음). 그러나 교체를 선택하려면 2012 년까지 기다려야합니다. 독을 선택하십시오 : 약하거나 부러 지거나 테스트되지 않은 상태 (대부분의 NIST 후보자들은 6 개월 이상 공개되지 않았습니까?) 힘든 선택입니다.
Ethan Heilman

5
RIPEMD는 손상되었지만 RIPEMD-128 / 160 / 256은 다르며 손상되지 않았습니다.
Bwooce

Skein for .NET의 성능 구현을 알지 못합니다. 나는 SkeinFish와 nskein을 만났으며 둘 다 매우 느 렸습니다.
Cocowalla

1
적어도 실제로 표준을 따르고 싶다면 실제 표준이 나올 때까지 SHA-3을 사용하여 기다릴 것입니다. 알고리즘 자체에 옵션이 너무 많습니다.
Paŭlo Ebermann 2016 년

3

MD5의 방어에는 임의의 MD5 해시로 파일을 생성하는 알려진 방법이 없습니다. 원래 작성자는 충돌이 발생하도록 미리 계획해야합니다. 따라서 수신자가 발신자를 신뢰하면 MD5는 정상입니다. 서명자가 악의적 인 경우 MD5가 손상되었지만 중간자 (man-in-the-middle) 공격에 취약한 것으로 알려져 있지 않습니다.


1
이 분야의 전문가는 아니지만 요즘 무차별 대입으로 임의의 MD5 해시를 계산할 수 있을까요?
mafu

@mafu : 여기서 늦게 응답했지만 무차별 대입을 통해 해시를 계산할 수 있습니다. 시간이 정말 오래 걸릴 수 있습니다.
Warty

@ItzWarty 필자는 구체적으로 필요한 시간을 언급하고있었습니다. MD5가 매우 짧기 때문에 합리적인 컴퓨팅 소스 (E3 또는 몇 개의 그래픽 카드가있는 저렴한 컴퓨터 그리드 몇 대를 며칠 이내에 임의의 MD5 해시를 계산할 수 있어야합니다.
mafu

@mafu 이미지 사전 공격에는 128 비트 해시에 대해 2 ^ 127 개의 해시 호출 비용이 발생합니다. 이것은 가능한 것과 거리가 멀다. 2 ^ 80 호출은 가능하지만 이미 매우 비쌉니다.
코드 InChaos

2

어떤 것을 사용하는지는 실제로 무엇을 사용하는지에 달려 있습니다. 파일이 전송 중에 손상되지 않고 보안에 관심이 없는지 확인하려면 빠르고 작게 진행하십시오. 수십억 달러에 달하는 연방 구제 금융 계약에 대한 디지털 서명이 필요하고 위조되지 않았는지 확인해야하는 경우 스푸핑이 느려지고 느려집니다.


1
많은 문제에 대한 해결책을 논의 할 때 MD5를 사용하여 빠른 ID (문자열 해싱)를 언급하지만 "md5가 고장났습니다 ... 사용하지 말고 sha1을 사용하십시오"라고 말하면 ... 약한 해시로 인해 근본적으로 깨진 것이 있다면 피해야합니다. 예 : 일반 데이터가 충돌하는 실제 작업 사례
Sam Saffron

MD5가 15 년 동안 수백만 명의 사람들에게 잘 작동 한 것으로 보니 해시 보안이 중요하지 않다면 괜찮습니다.
mqp

2
@sambo MD5는 시스템의 실제 보안 / 무결성이 충돌 방지에 의존 하는 경우를 제외하고는 거의 모든 경우에 잘 작동합니다 .
Rex M

2

md5가 찢어지기 전에 많은 암호가 압도적으로 손상되었지만 md5를 광범위하게 사용하고 있습니다.

충돌로부터 보호하지 않아도 (여전히 hmac에서 md5를 사용하는 것이 안전합니다) 속도를 원한다면 (때로는 느린 해시를 원할 경우) md5를 자신있게 사용할 수 있습니다.


@ 내가 당신과 함께하는 것처럼, 그것은이 질문으로 파고 들었던 일종의 약한 해시 함수에 관한 것이므로 근본적으로 사용되지 않아야합니다.
Sam Saffron

또한, 데이터 또는 데이터의 보안 요구가 균열 기간 (요즘 몇 분)보다 짧으면 MD5는 절대적으로 좋습니다. 상황 적으로 유용하지만 여전히 유용합니다.
annakata

@annakata-또한 여러 메시지에서 키를 재사용하지 않아야 그 상황에서 사용할 수 있습니다.
Steve Westbrook

2

BLAKE2 알고리즘을 살펴 보는 것이 좋습니다 .

설명했듯이 MD5보다 빠르며 최소한 SHA-3만큼 안전합니다. 또한 WinRar를 포함한 여러 소프트웨어 응용 프로그램으로 구현됩니다 .


많은 구현에서 SHA-256을 매우 빠르게 만드는 하드웨어 지원을 제외하고는 더 빠를 수 있습니다.
zaph

나는 동의한다. 2019 년 현재, Blake2b는 현재까지 출시 된 최고의 범용 해시입니다. 다른 모든 대안에 비해 훨씬 빠르며 보안 성이 떨어지지 않으며 (적어도 의미있는 방법은 아님) 336 바이트의 램 (blake2의 경우 168)으로 만 실행될 수 있으며, 리틀 엔디안 CPU에 최적화되어 있습니다. 오늘날의 시스템에서 지배적 인 엔디 언.
hanshenrik '12

0

나는 이런 종류의 전문가는 아니지만 보안 커뮤니티를 유지하고 많은 사람들이 md5 해시가 깨진 것으로 간주합니다. 사용할 데이터는 데이터의 민감도와 특정 응용 프로그램에 따라 다릅니다. 키가 좋고 강력하다면 보안이 덜 약한 해시를 피할 수 있습니다.


1
해시 함수는 일반적으로 키를 사용하지 않습니다
Ethan Heilman

0

다음은 내 제안입니다.

  1. 공격이 예상되면 MD5를 잊어 버릴 것입니다. 온라인 에는 많은 레인보우 테이블 이 있으며 RIAA와 같은 회사는 해시가 동일한 시퀀스를 생성 할 수있는 것으로 알려져 있습니다.
  2. 가능하면 소금을 사용하십시오 . 메시지에 메시지 길이를 포함 시키면 유용한 해시 충돌을 만들기가 매우 어려울 수 있습니다.
  3. 일반적으로 비트 수가 많을수록 충돌이 적고 (비둘기 원칙에 따라) 느리고 더 안전 할 수 있습니다 (취약성을 찾을 수있는 수학 천재가 아닌 경우).

데스크탑 Intel P4 컴퓨터에서 31 초 안에 md5 충돌을 생성하는 알고리즘에 대한 자세한 내용은 여기를 참조하십시오.

http://eprint.iacr.org/2006/105


이 의견은 매우 오래되었고 매장 된 것으로 보이지만 , RIAA는 동등한 해시로 시퀀스를 생성 할 수있는 것으로 알려져 있습니다 . 특히, 8 년 전 MD5를 무차별 공격하는 것은 2017 년에 비해 다소 사소한 것이 었으므로 꽤 좋은 이유가 있었을 것입니다.
i336_
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.