Идемпотентная процедура расшифровки / алгоритм - PullRequest
2 голосов
/ 15 мая 2019

Существует ли простой алгоритм дешифрования с идемпотентностью? Примерно так:

decrypt(encrypt(x)) ===  x  === decrypt(decrypt(decrypt(encrypt(x))))

Ответы [ 3 ]

4 голосов
/ 15 мая 2019

Предположим, decrypt - это функция f, а encrypt - это функция g.Следовательно, у нас есть f(g(x)) = x и f(f(f(g(x)))) = x.Следовательно, у нас есть f(f(x)) = x, а затем f(f(x)) = f(g(x)) = x.Если результатом дешифрования будет биективная функция, можно сделать вывод, что f(x) = g(x), а затем g(g(x)) = x.Кроме того, если мы предположим, что g(x) является биективным, это означает, что f является обратным g.Следовательно, g(x) = x!

Кроме того, если у нас нет биективного предположения для функции g (что не так уж далеко!), Из g(g(x)) = x, мы находим, что для всех входных данных x функция отображает значение g(x) на себя.Следовательно, g(x) = x по определению.

2 голосов
/ 15 мая 2019

Вот еще один вариант (но примите ответ OmG).

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

  2. Вы хотите, чтобы функция дешифрования была идемпотентной.

  3. Единственной идемпотентной инъективной функцией является тождественная функция . Доказательство. Пусть f идемпотентен и инъективен. Тогда по определению идемпотента f (f (x)) = f (x). Теперь, поскольку f инъективно, f (x) отображается на f (x) для всех x, так что, эй, это единичная функция. * 1015 что и требовалось доказать *

  4. Функция тождества является утвердительным ответом на ваш вопрос «Существует ли простой алгоритм дешифрования с идемпотентностью?»

  5. * 1022. это "нет"
0 голосов
/ 15 мая 2019

Если дешифрование должно быть идемпотентным и , оно действительно должно что-то делать, тогда должна быть возможность отличить (незашифрованный) открытый текст от (зашифрованного) зашифрованного текста.

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

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

Тогда ваше идемпотентное дешифрование будет выглядеть так:

idempotentDecrypt(ciphertext,key) {
    if (is_signed(ciphertext, key)) {
        return rawDecrypt(removeSignature(ciphertext),key)
    } else {
        return ciphertext;
    }
}

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

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

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