RSA 2048 Whole-File Encryption (не только содержимое файла) - PullRequest
0 голосов
/ 29 марта 2011

Я получил, как мне показалось, очень странное требование от вендора для моего последнего проекта, и прежде чем я вернусь к ним с просьбой о новых требованиях или разъяснениях, я подумал, что отскочу от толпы stackoverflow, чтобы убедиться, что я не ' Я совершенно не прав.

Мы отправляем файл поставщику с конфиденциальной информацией. Поставщик сказал нам, что нам необходимо зашифровать файл с помощью RSA 2048-битного шифрования. Я повторил им требование 3 раза, чтобы получить разъяснения о том, что именно им нужно, и каждый раз, когда они подтверждали, что простое шифрование содержимого файла - это не то, о чем они просили, а вместо этого им требовалось, чтобы я зашифровал весь файл.

Мой основной язык разработки - C #, поэтому я искал способ сделать это с помощью C #, а затем расширил свой поиск, чтобы найти что-нибудь, что указывало бы, как это можно сделать, но я ничего не могу найти. Кроме того, мой коллега пытался использовать RSA 2048 в качестве доказательства концепции для шифрования содержимого файла, но сталкивается с ограничением шифрования символов в 246 символов, что заставляет меня думать, что это даже невозможно. После добавления 246-го символа мы получаем ошибку сбоя: «Ключ недопустим для использования в указанном состоянии».

Ценю любую помощь!

Ответы [ 3 ]

4 голосов
/ 29 марта 2011

Обычно вы не используете RSA для прямого шифрования данных;это слишком медленноОбычная практика - генерировать случайный ключ для быстрой симметричной криптосистемы, использовать его для шифрования данных и использовать RSA для шифрования симметричного ключа.Вероятно, поэтому вы сталкиваетесь с этим ограничением размера.

PGP сделает то, что вам нужно.

2 голосов
/ 30 марта 2011

Ну, ваш поставщик ничего не понимает в криптографии.Но если вы действительно хотите следовать этим странным требованиям с их стороны ... зашифруйте файл кусками.RSA не может работать с контентом больше, чем его размер модуля минус несколько байтов.В вашем случае это 256 байтов минус, как 11 байтов, я полагаю, в зависимости от используемой схемы заполнения.

Также вы можете сделать несколько причудливых цепочек CBC для блоков, чтобы еще больше повысить безопасность, и, без сомнения, ваш поставщик сочтет вас блестящим специалистом.после того, как вы объясните ему, как расшифровать файл.;) Никогда не слышал о RSA-CBC, но это абсолютно блестящая идея;)

0 голосов
/ 29 марта 2011

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

ОБНОВЛЕНИЕ : Ниже приводится функция VB.net для расчета необходимого размера ключа RSA.Я просто копирую из моего старого проекта.Эта функция предполагает, что вы используете оптимальное асимметричное дополнение шифрования (OAEP):

Public Function CalculateRequireRsaKeyLength(ByRef ByteArrayToEncrypt As Byte()) As Int32


    Try
        Dim TotalBytesEncryptable As Int32

        'TotalBytesEncryptable = ((KeyLength - 384) / 8) + 7

        TotalBytesEncryptable = ByteArrayToEncrypt.Length - 7
        TotalBytesEncryptable = TotalBytesEncryptable * 8
        TotalBytesEncryptable = TotalBytesEncryptable + 384
        If TotalBytesEncryptable <= 384 Then
            Return 384
        End If

        If TotalBytesEncryptable >= 16384 Then
            'means error
            Return 0
        End If

        Return TotalBytesEncryptable
    Catch ex As Exception
        'System.IO.File.WriteAllText("e:\qqwwee.txt", ex.ToString)
        Return 0
    End Try
End Function

ОБНОВЛЕНИЕ : вот ссылка для расчета размера ключа RSA: как использовать RSA для шифрования файлов(огромные данные) в C #

...