Простое целочисленное шифрование

Существует ли простой алгоритм для шифрования целых чисел? Таким образом, функция E (я, k), который принимает n-bit целое число и ключ (какого-либо типа) и производит другого, несвязанное n-bit целое число что при питании во вторую функцию D (E (i), k) (наряду с ключом) производит исходное целое число?

Очевидно, существуют некоторые простые обратимые операции, которые можно выполнить, но они все, кажется, производят ясно связанные выводы (например, последовательный вывод исходных данных к последовательным выводам). Кроме того, конечно, существуют криптографически сильные стандартные алгоритмы, но они не производят достаточно маленькие выводы (например, 32-разрядный). Я знаю, что любая 32-разрядная криптография может быть вынуждена скотами, но я не ищу что-то криптографически сильное, просто что-то, что выглядит случайным. Теоретически разговор его должен быть возможным; в конце концов, я мог просто создать словарь путем случайного соединения каждого целого числа. Но я надеялся на что-то немного менее интенсивно использующее память.

Править: Спасибо за ответы. Простые решения XOR не будут работать, потому что подобные исходные данные произведут подобные выводы.

5
задан tloflin 4 May 2010 в 23:19
поделиться

7 ответов

Разве это не составит блочный шифр с размером блока = 32 бита?

Не очень популярен, потому что его легко перерыв. Но теоретически возможно. Вот одна реализация на Perl: http://metacpan.org/pod/Crypt::Skip32

ОБНОВЛЕНИЕ: см. Также Сохранение формата encryption

ОБНОВЛЕНИЕ 2: RC5 поддерживает 32-64-128 бит для размера своего блока

10
ответ дан 18 December 2019 в 09:48
поделиться

Простой:

rand = new Random(k);
return (i xor rand.Next())

(точка xor-ing с rand.Next () вместо k состоит в том, что в противном случае, учитывая i и E (i, k) , вы можете получить k по k = i xor E (i, k) )

1
ответ дан 18 December 2019 в 09:48
поделиться

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

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

0
ответ дан 18 December 2019 в 09:48
поделиться

Если вы просто хотите выглядеть случайно и не заботитесь о безопасности, как насчет того, чтобы просто поменять биты местами. Можно просто перевернуть битовую строку, так что старший бит становится младшим, второй старший, второй младший и т.д., или можно сделать другую случайную перестановку (например, 1 к 4, 2 к 7 3 к 1 и т.д.).

0
ответ дан 18 December 2019 в 09:48
поделиться

Сколько целых чисел вы хотите зашифровать? С каким объемом ключевых данных вы хотите иметь дело?

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

Недостатком является то, что проблема сохранения ключа в секрете примерно такая же большая, как и проблема сохранения секретности ваших данных.

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

Но если серьезно, если вы шифруете целое число, что вы собираетесь делать с ключом, независимо от того, какой шифр вы выберете? Сохранение ключа в секрете будет проблемой примерно такой же (или даже большей), чем сохранение в секрете целого числа. А если вы шифруете кучу целых чисел, просто используйте стандартный проверенный шифр, который вы найдете во многих криптографических библиотеках.

RC4 будет производить столько вывода, сколько вы хотите, поскольку это потоковый шифр.

0
ответ дан 18 December 2019 в 09:48
поделиться

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

4
ответ дан 18 December 2019 в 09:48
поделиться

Как насчет XOR с праймом или двумя? Замена битов местами кажется очень случайной при попытке анализа.
Попробуйте что-нибудь вроде XORing с простым и самим собой после сдвига битов.

0
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: