2013-03-19 4 views
5

Я заинтересован в предоставлении управляемой DLL для использования в .NET, которая обеспечивает аутентифицированные услуги шифрования. DLL может использоваться в программе WPF или приложении ASP. У меня есть пара вопросов, связанных с криптографическими и потоковыми моделями Microsoft.CryptoStream и аутентифицированные режимы шифрования

Аутентифицированные режимы шифрования (CCM, CWC, EAX, GCM и т. Д.) Обычно создают два артефакта - сначала это шифрованный текст, а второй - тег аутентификации. Его довольно простое шифрование, но могут быть некоторые проблемы. Например, CCM не может быть потоковым из-за способа создания заголовка, а аутентифицированные режимы шифрования создают тег аутентификации.

Расшифровка сложнее, поскольку она не может быть передана. Расшифровка не может быть потоковой, потому что весь текст шифрования должен быть доступен, и этот шифрованный текст должен быть проверен с использованием тега аутентификации перед расшифровкой.

Как адаптировать аутентифицированный режим шифрования для блочного шифрования, чтобы его можно было использовать в CryptoStream? Возможно ли это? Возможно, это почему Microsoft не предоставляет его?

Имеет ли рекомендация Microsoft? Например, разбейте большое сообщение на более мелкие сообщения или единицы (каждый со своим собственным тегом)? Или MS рекомендует буферизацию, пока не будет введено все сообщение и тег?

Где Microsoft рекомендует «поместить» тег? В начале потока? В конце потока?

Некоторые полезные ссылки:

ответ

4

В 2010 году Microsoft команда безопасности CLR выпустила extension to the System.Security.Cryptography, который включал аутентификацией симметричного шифрования специально GCM. Почему они ничего не сделали с этим с тех пор, я не знаю.

Но, поскольку в вашем вопросе акцент делается на «что бы сделать Microsoft?», Вот оно ... они сделали это.

+0

Отлично, спасибо. Не нужно заново изобретать колесо. – jww

+1

Я видел, что GCM используется как в XML-шифровании, так и в последних спецификациях проекта TSL. Добавление GCM в качестве аутентифицированного шифрования имеет большой смысл. CCM также безопасен, но это PITA для использования и реализации. –

+0

@owlstead - «CCM также безопасен, но это PITA для использования и реализации». Lol .... +1. Я просто читал книгу по технике безопасности и рассказывал об истории и политике принятия СКК. Мне жаль, что я не помню, какую книгу это было ..... – jww

2

Вы используете предположение, которое действительно не выполняется для аутентифицированного шифрования baard на потоковых шифрах, таких как GCM: что вы не можете расшифровать перед проверкой. Это справедливо для, например, AES в режиме CBC, который аутентифицируется MAC при применении оракулов. Например, режим GCM не выполняет прописку, поскольку базовый потоковый шифр - это шифрование режима CTR. Это, в свою очередь, означает, что отступы не должны применяться, поэтому прописные оракулы не применяются.

Конечно, было бы крайне неразумно выполнять любую бизнес-логику с дешифрованными данными до ее аутентификации. Любой код, который затрагивает непроверенные данные, должен считаться высоким риском, и его следует статически анализировать и проверять. Если вы хотите выполнить какую-либо бизнес-логику раньше, тогда вы должны убедиться, что она будет проходить проверку подлинности до этого. Разделение его на более мелкие части, несомненно, имело бы смысл.

Очевидно, что это только мои рекомендации. Для рекомендаций Microsoft: если они не могут быть найдены с помощью Google или (не дай бог) Bing: спросите Microsoft. Здесь никто не может говорить.

+0

Спасибо, что я верю. Я действительно не согласен с тем, что вы сказали, но стандарт GCM позволяет это. (Для других: [высокопроизводительный режим аутентифицированного шифрования] (http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf), с. 2). С учетом сказанного, ни один из кодов под моим контролем не использует парадигму использования до проверки. Я могу переключиться на SSH или SSL/TLS, если мне нужна эта безрассудство. – jww

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