Мне нужен очень, очень быстрый один-к-одному алгоритм. Алгоритм не должен быть нерушимым. Достаточно сильной, но молниеносной. Я буду реализовывать это аппаратно. Область тоже вызывает беспокойство, поэтому она не должна использовать слишком много логики.
Это должна быть функция f_N (x), чей вход - это N-разрядное число, а чей вывод - N-разрядное число. N является константой, вероятно, между 20-70. Функция должна быть взаимно-однозначной. (то есть обратимый, что означает, что расшифровка возможна. Скорость дешифрования не имеет значения.)
Мне нужно зашифровать до 3 нс, что составляет около 333 млн входов в секунду. DES, например, делает около 50 Мбит в секунду. Мне нужно 333M входов в секунду.
До сих пор я использовал шифр Фейстеля примерно с 6 раундами. Кажется, это займет около 3 нс.
Предложения
Дополнительные заметки
Были некоторые вопросы, поэтому я объясню. Мне нужно положить ключи в хэш-таблицу. Стандартный метод заключается в хешировании ключа ввода и использовании результата в качестве индекса в таблице. Каждая строка в таблице должна хранить исходный ключ. Теория информации говорит нам, что строки таблицы на самом деле не должны быть такими же широкими, как клавиша ввода, а такими же широкими, как клавиша ввода меньше количество бит в адрес таблицы. Например:
- вход: x (N бит)
- хеш: x% 128 (8 бит)
- верификатор: пол (х / 128) (N-8 бит)
Было бы глупо на процессоре, где целые числа обычно имеют одинаковую ширину, но я делаю это аппаратно.
x% 128 - легко взломать хеш. Фактически, если клавиши ввода отличаются только в первых нескольких битах, вы случайно сломаете хеш. Я хочу хэш, который не будет взломан случайно, и его даже может быть сложно умышленно сломать. Я также попробовал LFSR . LFSR бывают быстрыми, но два LFSR одинаковой длины генерируют результаты хеширования, которые коррелируют линейно. (Если f (x) и g (x) дают одинаковый хеш для двух разных полиномов, f (x + 1) и g (x + 1) легко коррелируют.)
Итак, мне нужна функция с N-битным входом и V-битным, H-битным выходом (V + H = N), где трудно найти два входа длиной N, так что оба будут выдавать один и тот же H. Шифрование подходит для счета в том смысле, что оно оставляет выходной файл той же длины, что и входной, и его трудно повернуть вспять. Может также сработать что-то кроме шифрования, хотя мне кажется, что то, что я хочу, - это почти само определение шифрования.
Извините, что не объяснил все это заранее. Надеюсь, что это проясняет ситуацию.