Inferno - SuiteB.Encrypt каждый раз генерирует разные байтовые массивы - PullRequest
0 голосов
/ 03 июня 2018

Я использовал Inferno для шифрования строки.Шифрование и дешифрование работают, но несколько шифрований в одном байтовом массиве, кажется, всегда приводят к совершенно другому байтовому массиву.

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

var key = Encoding.UTF8.GetBytes("my key");

var encrypted = System.Web.HttpServerUtility
            .UrlTokenEncode(SuiteB.Encrypt(key, @"C:\some\path\to\encrypt".ToBytes().AsArraySegment()));

var decrypted = SuiteB.Decrypt(key, 
    System.Web.HttpServerUtility.UrlTokenDecode(encrypted).AsArraySegment()).FromBytes();

При первом запуске encrypted устанавливается на:

hI_n_XrS_UuYR4heaGIfApOVco2fy0AAzU_qm8e7QMdoZg25hY2C1HFQ4w0AAvbQlv5i0DdXs3QuK50K1etHnL7ftfTS9HjLJeNCj4o6X-A-K6BVUivXBiU6DQN06ZgqVzIz3-n00

Если я перетаскиваю курсор отладки обратно к нему, чтобы сгенерировать его снова, яget:

SbOst3-Qe2NqtVSNrFlHzUgQn8N-6PfKTnw4sko4BEcYuyEl7LlHB5wVRerifG9AIwo1pHYJHT57QGuIsgyvdswUjPDSuGM1dF7kUiSMZk3l1wmD3Q-KA-HQwr0yAURAMPRbKpM20

Нет никаких сомнений в логическом и значимом объяснении того, почему он это делает, но 1) я хотел бы понять, почему и 2) есть ли способ заставить его не генерироватькаждый раз другой байтовый массив?

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

Примечание: Пришлось создать новый тег inferno.

1 Ответ

0 голосов
/ 03 июня 2018

Что касается того, почему используемая вами техника шифрования, вероятно, использует блочный режим , отличный от ECB.Это хорошая вещь .Причина, по которой это сделано (и почему существуют другие режимы блоков), заключается в том, чтобы устранить фундаментальный недостаток в использовании блочных шифров в учебниках.

Проблема здесь заключается в том, чтобы делать повторения в виде открытого текста и размер блока вашего шифра.Режим ECB - самый основной режим шифрования.Он буквально берет один блок открытого текста, шифрует его и выводит соответствующий блок зашифрованного текста.Вот и все.Допустим, вы зашифровали путь /folder1/folder2/folder1/folder2/test.txt с помощью AES в режиме ECB.Ваш зашифрованный текст будет выглядеть примерно так:

C8A8880A02675911D5345D90387E9110
C8A8880A02675911D5345D90387E9110
86329A09EB2B6C8E686E4741CFA6C424

Где каждая строка гекса является отдельным блоком зашифрованного текста.Скорее всего, вы сразу заметите, в чем проблема.Первый и второй блоки одинаковы.Это потому, что повторение происходит на границах блоков открытого текста.Таким образом, эта информация сразу же просочилась в атакующий.Это много информации, которую можно выдать о открытом тексте.Рассмотрим другой сценарий, в котором зашифрованный текст содержит «да» или «нет» и отправляется более одного раза.Это становится тривиальным, чтобы определить, что есть что.Вот почему режим ECB не рекомендуется для использования.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...