2012-02-09 2 views
3

Я занимаюсь классом шифрования, обучая себя авизации java. Этот класс будет иметь некоторые чувствительные вещи в нем, такие как тип шифрования и тому подобное. Все это может быть отрадно воспринято тем, что у кого-то была мотивация.Есть ли способ заблокировать класс от отражения?

Я использовал отражение, чтобы обходить частные переменные и методы раньше (не гордясь этим), поэтому я знаю, что это можно сделать. Есть ли способ полностью избежать отражения от работы над целым классом - или даже его частями, или это противоречит java - более конкретно, авизо - дизайн безопасности?

+4

[Принцип Kerckhoffs] (http://ru.wikipedia.org/wiki/Kerckhoffs's_principle): * Криптосистема должна быть безопасной, даже если все, что касается системы, кроме ключа, является общедоступным . Другими словами, не имеет значения, смогут ли люди увидеть, какой алгоритм вы используете. –

ответ

10

Это называется защитой от неизвестности - если информация о вашем известном алгоритме шифрования сделает его небезопасным, он уже небезопасен.

Нет, вы не можете помешать людям отразиться на вашем классе. В самом худшем случае они могут загружать библиотеку JNI, которая попадает прямо в кучу JVM и считывает содержимое памяти (или записывает их)! Если ваш код работает на машине под контролем других, то ничего не делает, это действительно конфиденциально.

Если вы сами пишете библиотеку JNI, ее можно декомпилировать и переконструировать (и это явно законно в прошлом во многих юрисдикциях, кроме того).

Просто сделайте алгоритм безопасным, даже когда его работа известна всем или (еще лучше!) Использует реализацию, которая уже написана и является частью языка Java.

Если вы беспокоитесь о раскрытии материала для ключей, используйте методы Java для доступа к хранилищу ключей. Если вы действительно параноик, убедитесь, что хранилище резервных копий является аппаратным токеном PKCS11.

+1

Отличный ответ Borealid – fredcrs

+0

@Borealid Спасибо за подробный ответ, хотя, если я раньше параноидальный, теперь я. Для меня это звучит, как единственное, что безопасность действительно делает это, чтобы немотивированные люди не были плохими. – AedonEtLIRA

+2

@Aedon: Это не совсем так, дело в том, что обфускация вашего * кода * не должна влиять на безопасность. Существует множество безопасных систем, которые выдержали испытание временем (AES, RSA и т. Д.), Которые опубликованы и никогда не были сломаны (с учетом секретного и достаточно большого ключа). Но никакая криптографическая система, о которой я знаю, не может обеспечить шифрование/дешифрование, а скорее хранение или передачу данных. –

2

Нет - если у вас нет контроля над задействованными менеджерами безопасности или физического распространения вашего кода, тогда любой может взглянуть на него. Даже если вы можете убедиться, что ваше приложение обычно работает с менеджером безопасности, который настроен на предотвращение отражения, если у атаки есть ваш код (например, файл jar), тогда они могут запускать его, как им нравится - или декомпилировать его, посмотреть при содержании и т. д.

Смежные вопросы