Почему для инициализации JCE требуется MD5

Я экспериментирую с включением FIPS 180-3 в моем Java-приложении. FIPS 180-3 позволяет использовать только 5 безопасных [хэшей] (http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf), MD5 не входит в их число. Поэтому я пытаюсь программно удалить алгоритмы MD5 от поставщика Sun. Это пример кода.


public static void main(String[] args) throws Exception {
    Security.removeProvider("SUN");
    Sun sun = new Sun();
    sun.remove("MessageDigest.MD5"); //Comment and it will work !!!
    Security.addProvider(sun);
    Cipher ciph = Cipher.getInstance("AES");                
}   

Но это вызывает следующее исключение. Если вы прокомментируете «sun.remove(..», программа будет работать нормально. Если я удалю MD2 вместо MD5, то она также будет работать нормально.

Мне кажется, что библиотеки jre используют MD5 для своей подписи, но я проверено средство подписи jre/lib/ext/sunjce_provider.jar и его использование sha1.

Есть идеи, почему мой код дает сбой с этой ошибкой?

Исключение в потоке "main" java.lang.ExceptionInInitializerError в javax.crypto.Cipher.getInstance(DashoA13*..) at TestRemoveMD5.main(TestRemoveMD5.java:20)

Вызвано: java.lang.SecurityException: невозможно настроить сертификаты для доверенных центров сертификации. на javax.crypto.SunJCE_b.(DashoA13*..) ... еще 3

Причина: java.lang.SecurityException: классы подписи были изменены на javax.crypto.SunJCE_b.d(DashoA13*..) на javax.crypto.SunJCE_b.c(DashoA13*..) в javax.crypto.SunJCE_b$1.run(DashoA13*..) в java.security.AccessController.doPrivileged (собственный метод) ...4 more

6
задан Atul Soman 27 June 2012 в 05:44
поделиться