Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > Шифр Вернама |
Автор: KPEHDEL 19.11.2012, 01:58 | ||||
Здравствуйте. делаю шифр вернама. Есть два метода: Генерирует ключ:
Зашифровывает:
Если шифрую сообщение, получаю шифр. По идее, если вбить теперь шифр в качестве сообщения, должна появитcя расшифровка. Но происходит новая шифровка. Скорей всего неправильно генерирую ключ, подскажите, как правильно? |
Автор: SKrivosein 19.11.2012, 13:59 | ||
Немного переделал твою програмку
и все работает нормально. Вопрос, где храниш ключ между шифровкой и разшифровкой? Если ты не теряеш ключ, а потом не генерируеш новый? А также не используй это -> str_code += , при длине 1000 знаков ты перекопируеш в памяти string 1000 раз. |
Автор: KPEHDEL 19.11.2012, 15:00 | ||||
Дык, нет ведь) Ключ должен уничтожаться после шифрования, а при расшифровки должен генерироваться новый ключ. В виженере ведь соль не в ключе, а в алгоритме генерации ключа. Надо вот так:
И при этом, чтобы расшифровало) |
Автор: SKrivosein 19.11.2012, 15:26 | ||||
Извини, где ты такое взял!
Твой код и будет работать
потому что Windows генерирует один и тотже Random для str, но зачем тебе разшифровка если ты уже знаеш str? И абсолютно нулевая защита против того кто знает твой алгоритм. Вся фишка Вермана что обе стороны должны иметь одинаковый одноразовый ключ, и в этом его слабость на практике. |
Автор: KPEHDEL 19.11.2012, 21:20 | ||||||||||
Товарищ. Я с вами не согласен.
В википедии как минимум)
Если бы было так, это было обычное XOR шифрование. Цитирую из википедии:
ну как бы да, потому-что алгоритм знает только тот, кто дешифрует.
Утверждая это, ты отталкиваешься от своего примера. Это не верно. Для простоты, представь. У тебя два отдельных метода, шифратор и дешифратор(на самом деле метод один и тот же, т. к. метод Вернама принадлежит типу зеркального шифрования). Суть в том, что ты вводишь сообщение. Генерируется случайный ключ по какому-то алгоритму, известному только тому кто шифрует и тому кто дешифрует. Далее происходит шифрование операцией XOR символ строки и ключа. При дешифровании нам само собой не известен ключ и исходное сообщение. Есть только шифр. Генерируется случайный ключ, тем же алгоритмом, что и при шифровании. Затем, происходит всё то же, что и при шифровании и должны получить исходное сообщение. Я вижу это так. Если же передавать ключ, чем это будет отличатсья от обычного XOR шифрования? Вопрос мой остаётся прежнем, мне не понятно как правильно генерировать ключ, на основе какого-то алгоритма, чтобы потом взаимообратно шифровать/дешифровать. |
Автор: SKrivosein 19.11.2012, 23:15 | ||||||||||
Товарищ
Oбрати внимание на: физически передать носитель информации
В современной криптографии все алгоритмы известны и в основном открыты. Сила крипто-системы определяется степенью надежности при известном алгоритме и неизвестном ключе. Проверь в интернете: AES, DES, ГОСТ 28147-89. А ты пытаешся написать систему где дешифровщику неизвестен ключ, а сила (тайна) шифрования зависит от какого то алгоритма, то есть другой стороне достаточно узнать твой алгоритм создания ключа и вся система идет к ч.... Так же никаких алгоритмов не хватит.
Как может быть истинно случайным по определению ключ который можно повторить алгоритмом? Кстати Random к сожалению не является истинно случайным ключом. Microsoft MSDN: Represents a pseudo-random number generator, a device that produces a sequence of numbers that meet certain statistical requirements for randomness. Создать истинный генератор случайных чисел на машине очень сложно, для этого используют какой то природный инициализатор генератора, например случайные паразитные электрические помехи в компютере.
Зачем тогда эта вещь называется ключ? Еще раз прочти внимательно:
это с Википидии. Заметь в целой статье на Вики нечего не говорится о каком то специальном алгоритме ключа. Ключ используется один раз для зашифровки, один раз для расшифровки и уничтожается. В следующий раз используется другой уникальный ключ. Не знаю как ещё тебя убедить. Прочити пожалуйста, товарищ, ещё один источник: http://kriptografea.narod.ru/vernam.html |
Автор: KPEHDEL 27.11.2012, 19:20 |
Спасибо за разъяснение. У меня последнее уточнение связанное с различием обычного шифра XOR и Вернама. Если ключ размером с сообщение и каждый символ ключа одинаково случайный, то это шифр Вернама. Если ключ цикличный, ввели ключ ab, сообщение abcd, ключ будет abab. То это обычный шифр XOR. Я правильно понял? |
Автор: SKrivosein 28.11.2012, 03:38 | ||
Мы достаточно далеко ушли от программирования .NET и модератор нас сейчас перекинет в раздел криптография ![]() Если я правильно понял
В современных алгоритмах таких как http://ru.wikipedia.org/wiki/DES, http://ru.wikipedia.org/wiki/ГОСТ_28147-89 вместе с XOR применяется блочное преобразование по типу http://ru.wikipedia.org/wiki/Сеть_Фейстеля перемешивающее и распределяющее эти циклические закономерности до такой степени, что крипто-анализ становится бесперспективным. В шифре Вернама условия ключ всегда равен побитовой длине текста и ключ всегда используется только один раз фактически создают бесконечно длинный случайный ключ и бесконечно длинный без циклических закономерностей зашифрованный текст. Это единственный способ у которого математически доказана абсолютная крипто стойкость, но из за правил создания и передачи ключа очень ограниченное применение. P.S. Для серьёзного занятия современной криптографией и создания практически применимых систем шифрования кроме программирования к сожалению необходима ещё одна маленькая вещь: "кандидат физико-математических наук" минимально ![]() |