Введение

В криптографии, твёрдое ядро предиката односторонней функции f является предикатом b (т.е. функцией, выход которой – один бит), который легко вычислить (как функцию от x), но трудно вычислить, зная f(x). В формальном выражении, не существует вероятностного алгоритма полиномиального времени (PPT), который вычисляет b(x) из f(x) с вероятностью значительно большей половины при случайном выборе x. Иными словами, если x выбрано равномерно случайным образом, то, зная f(x), любой PPT-противник может отличать бит твёрдого ядра b(x) от равномерно случайного бита лишь с пренебрежимо малым преимуществом относительно длины x. Функция твёрдого ядра может быть определена аналогично. То есть, если x выбирается равномерно случайным образом, то, зная f(x), любой PPT-алгоритм может отличать значение функции твёрдого ядра h(x) от равномерно случайных битов длины |h(x)| лишь с пренебрежимо малым преимуществом относительно длины x. Предикат твёрдого ядра «в концентрированном смысле» отражает сложность инвертирования f. В то время как одностороннюю функцию трудно инвертировать, нет гарантий относительно возможности вычисления частичной информации об исходном значении c по образу f(x). Например, хотя RSA предполагается односторонней функцией, символ Якоби исходного значения можно легко вычислить по символу Якоби образа. Пусть f – односторонняя функция. Определим g(x, r) = (f(x), r), где длина r равна длине x. Пусть xj обозначает j-й бит x, а rj – j-й бит r. Тогда это является предикатом твёрдого ядра g. Обратите внимание, что b(x, r) = <x, r>, где <·, ·> обозначает стандартное внутреннее произведение на векторном пространстве (Z2)n. Этот предикат является твёрдым ядром из-за вычислительных сложностей; то есть, его не трудно вычислить, потому что g(x, r) – информация, теоретически теряемая. Скорее, если существует алгоритм, эффективно вычисляющий этот предикат, то существует другой алгоритм, эффективно инвертирующий f. Аналогичная конструкция даёт функцию твёрдого ядра с O(log |x|) выходными битами. Предположим, что f – сильная односторонняя функция. Определим g(x, r) = (f(x), r), где |r| = 2|x|. Выберем функцию длины l(n) = O(log n) так, что l(n) ≤ n. Пусть затем h(x, r) := b1(x, r) b2(x, r) … bl(|x|)(x, r) – функция твёрдого ядра с длиной выхода l(|x|). Иногда бывает так, что фактический бит входного x является твёрдым ядром. Например, каждый отдельный бит входных данных функции RSA является предикатом твёрдого ядра RSA, и блоки O(log |x|) битов x неотличимы от случайных битовых строк за полиномиальное время (при условии, что функция RSA трудно инвертировать). Предикаты твёрдого ядра дают способ построить псевдослучайный генератор из любой односторонней перестановки. Если b – предикат твёрдого ядра односторонней перестановки f, а s – случайное начальное значение, то это является псевдослучайной битовой последовательностью, где fn означает n-ю итерацию применения f к s, а b – сгенерированный бит твёрдого ядра на каждом шаге n. Предикаты твёрдого ядра односторонних перестановок с секретным ключом (известные как предикаты с секретным ключом) могут использоваться для построения семантически безопасных схем шифрования с открытым ключом.