Постквантовая криптография — часть криптографии, которая остаётся актуальной и при появлении квантовых компьютеров и квантовых атак. Так как по скорости вычисления традиционных криптографических алгоритмов квантовые компьютеры значительно превосходят классические компьютерные архитектуры, современные криптографические системы становятся потенциально уязвимыми для криптографических атак. Большинство традиционных криптосистем опирается на проблемы факторизации целых чисел или задачи дискретного логарифмирования, которые будут легко разрешимы на достаточно больших квантовых компьютерах, использующих алгоритм Шора. Многие криптографы в настоящее время ведут разработку алгоритмов, независимых от квантовых вычислений, то есть устойчивых к квантовым атакам.
 Существуют классические криптосистемы, которые опираются на вычислительно сложные задачи и имеют ряд существенных отличий от указанных выше систем, из-за чего их гораздо сложнее решить. Эти системы независимы от квантовых вычислений, и, следовательно, их считают квантово-устойчивыми (quantum-resistant), или «постквантовыми» криптосистемами.
 Постквантовая криптография в свою очередь отличается от квантовой криптографии, которая занимается методами защиты коммуникаций, основанных на принципах квантовой физики.
 Постквантовые криптографические конструкции способны спасти криптографический мир от квантовых атак. Хотя квантовый компьютер и уничтожит большинство традиционных алгоритмов (RSA, DSA, ECDSA), но сверхбыстрыми вычислениями не получится полностью избавиться от криптографии, так как постквантовая криптография, в основном, сосредоточена на пяти различных подходах, решающих проблему квантовых атак.
 Классическим примером является подпись Меркла с открытым ключом на основе хеш-дерева. Ральф Чарльз Меркл предложил этот алгоритм цифровой подписи в 1979 году как интересную альтернативу цифровым подписям RSA и DSA. Основной недостаток схемы Меркла состоит в том, что для любого открытого ключа на основе хеш-функции существует ограничение на количество подписей, которые могут быть получены из соответствующего набора закрытых ключей. Этот факт и снижал уровень интереса к подписям такого типа, пока не появилась потребность в криптографии, устойчивой к воздействию квантовых компьютеров.
 Является одним из наиболее перспективных кандидатов на пост-квантовые криптосистемы. Классическим примером является схемы шифрования McEliece и Niederreiter.
 Классическим примером схем шифрования являются Ring-Learning with Errors или более старые NTRU, GGH и криптосистема Миччанчо.
 Одной из самых интересных схем является подпись с открытым ключом Жака Патарина HFE, предложенная им в 1996 году как обобщение предложений Matsumoto и Imai.
 Ярким примером является шифр Rijndael, предложенный в 1998 году, впоследствии переименованный в AES (Advanced Encryption Standard).
 Это аналог протокола Диффи-Хеллмана, основанный на блуждании в суперсингулярном изогенном графе, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищённый от прослушивания канал связи. Считается небезопасным: известна эффективная атака на криптосистемы этого типа.
 В 1978 году документ, опубликованный разработчиками криптографического алгоритма с открытым ключом RSA (аббревиатура от фамилий Rivest, Shamir и Adleman), упоминал новый алгоритм Ричарда Шреппеля «linear sieve», который факторизовал любой RSA модуль 
  
    
      
        n
      
    
    {\displaystyle n}
  
 длины 
  
    
      
        [
        
          log
          
            2
          
        
        ⁡
        n
        ]
        +
        1
      
    
    {\displaystyle [\log _{2}n]+1}
  
 бит, используя 
  
    
      
        
          2
          
            (
            1
            +
            o
            (
            1
            )
            )
            (
            
              log
              
                2
              
            
            ⁡
            n
            
              )
              
                1
                
                  /
                
                2
              
            
            (
            
              log
              
                2
              
            
            ⁡
            
              log
              
                2
              
            
            ⁡
            n
            
              )
              
                1
                
                  /
                
                2
              
            
          
        
      
    
    {\displaystyle 2^{(1+o(1))(\log _{2}n)^{1/2}(\log _{2}\log _{2}n)^{1/2}}}
  
 простых операций. Таким образом, для того чтобы этот алгоритм требовал по меньшей мере 
  
    
      
        
          2
          
            b
          
        
      
    
    {\displaystyle 2^{b}}
  
 простых операций, необходимо выбирать 
  
    
      
        n
      
    
    {\displaystyle n}
  
 длины по крайней мере не меньше чем 
  
    
      
        (
        0
        ,
        5
        +
        o
        (
        1
        )
        )
        
          b
          
            2
          
        
        
          /
        
        
          
            log
            
              2
            
          
          ⁡
          b
        
      
    
    {\displaystyle (0,5+o(1))b^{2}/{\log _{2}b}}
  
 бит. Так как 
  
    
      
        0
        
          ,
        
        5
        +
        o
        (
        1
        )
      
    
    {\displaystyle 0{,}5+o(1)}
  
 означает, что что-то сходится к 
  
    
      
        0
        
          ,
        
        5
      
    
    {\displaystyle 0{,}5}
  
 при 
  
    
      
        b
        →
        ∞
      
    
    {\displaystyle b\to \infty }
  
, то для выяснения правильного размера 
  
    
      
        n
      
    
    {\displaystyle n}
  
 при конечном 
  
    
      
        b
      
    
    {\displaystyle b}
  
 требуется более тщательный анализ скорости «linear sieve».
 В 1988 году Джон Поллард предложил новый алгоритм факторизации, который называется Общий метод решета числового поля. Этот алгоритм факторизовал RSA-модуль 
  
    
      
        n
      
    
    {\displaystyle n}
  
 размерности 
  
    
      
        
          log
          
            2
          
        
        ⁡
        n
      
    
    {\displaystyle \log _{2}n}
  
 бит, используя 
  
    
      
        
          2
          
            (
            1
            ,
            9
            …
            +
            o
            (
            1
            )
            )
            (
            
              log
              
                2
              
            
            ⁡
            n
            
              )
              
                1
                
                  /
                
                3
              
            
            (
            
              log
              
                2
              
            
            ⁡
            
              log
              
                2
              
            
            ⁡
            n
            
              )
              
                2
                
                  /
                
                3
              
            
          
        
      
    
    {\displaystyle 2^{(1,9\dotso +o(1))(\log _{2}n)^{1/3}(\log _{2}\log _{2}n)^{2/3}}}
  
 простых операций. Таким образом, требуется выбирать 
  
    
      
        n
      
    
    {\displaystyle n}
  
 длины не меньше чем 
  
    
      
        (
        0
        ,
        016
        …
        +
        o
        (
        1
        )
        )
        
          b
          
            3
          
        
        
          /
        
        (
        
          log
          
            2
          
        
        ⁡
        b
        
          )
          
            2
          
        
      
    
    {\displaystyle (0,016\dotso +o(1))b^{3}/(\log _{2}b)^{2}}
  
 бит, чтобы алгоритму потребовалось как минимум 
  
    
      
        
          2
          
            b
          
        
      
    
    {\displaystyle 2^{b}}
  
 простых операций.
 С 2008 года самые быстрые алгоритмы факторизации для классических компьютерных архитектур используют по меньшей мере 
  
    
      
        
          2
          
            (
            c
            o
            n
            s
            t
            +
            o
            (
            1
            )
            )
            (
            
              log
              
                2
              
            
            ⁡
            n
            
              )
              
                1
                
                  /
                
                3
              
            
            (
            
              log
              
                2
              
            
            ⁡
            
              log
              
                2
              
            
            ⁡
            n
            
              )
              
                2
                
                  /
                
                3
              
            
          
        
      
    
    {\displaystyle 2^{(const+o(1))(\log _{2}n)^{1/3}(\log _{2}\log _{2}n)^{2/3}}}
  
 простых операций. Были некоторые улучшения в значениях 
  
    
      
        c
        o
        n
        s
        t
      
    
    {\displaystyle const}
  
 и в деталях 
  
    
      
        o
        (
        1
        )
      
    
    {\displaystyle o(1)}
  
, но не трудно догадаться, что 
  
    
      
        1
        
          /
        
        3
      
    
    {\displaystyle 1/3}
  
 оптимально, и что выбор модуля 
  
    
      
        n
      
    
    {\displaystyle n}
  
 длиной примерно равной 
  
    
      
        
          b
          
            3
          
        
      
    
    {\displaystyle b^{3}}
  
 бит, позволит сопротивляться всем возможным атакам на классических компьютерах.
 В 1994 году Питер Шор предложил алгоритм, который факторизовал любой RSA-модуль 
  
    
      
        n
      
    
    {\displaystyle n}
  
 размерности 
  
    
      
        b
        =
        
          log
          
            2
          
        
        ⁡
        n
      
    
    {\displaystyle b=\log _{2}n}
  
 бит, используя 
  
    
      
        
          b
          
            2
            +
            o
            (
            1
            )
          
        
      
    
    {\displaystyle b^{2+o(1)}}
  
 (точнее 
  
    
      
        
          b
          
            2
          
        
        ⋅
        log
        ⁡
        (
        b
        )
        ⋅
        log
        ⁡
        (
        log
        ⁡
        (
        b
        )
        )
      
    
    {\displaystyle b^{2}\cdot \log(b)\cdot \log(\log(b))}
  
) кубитовых операций на квантовом компьютере размера порядка 
  
    
      
        2
        ⋅
        
          b
          
            1
            +
            o
            (
            1
            )
          
        
      
    
    {\displaystyle 2\cdot b^{1+o(1)}}
  
 кубит (и небольшого количества вспомогательных вычислений на классическом компьютере). Пользуясь алгоритмом Шора, необходимо по крайней мере выбирать модуль 
  
    
      
        n
      
    
    {\displaystyle n}
  
 битовым размером не меньше чем 
  
    
      
        
          2
          
            (
            0
            ,
            5
            +
            o
            (
            1
            )
            )
            b
          
        
      
    
    {\displaystyle 2^{(0,5+o(1))b}}
  
 бит, что является слишком большим числом для любого интересующего нас 
  
    
      
        b
      
    
    {\displaystyle b}
  
.
 Примеров алгоритмов, устойчивых к квантовым атакам, крайне мало. Но несмотря на больший уровень криптографической устойчивости, постквантовые алгоритмы неспособны вытеснить современные криптосистемы (RSA, DSA, ECDSA и др.).
 Рассмотрим нападения на криптосистему с открытым ключом, а именно на алгоритм шифрования McEliece, который использует двоичные коды Гоппы. Первоначально Роберт Мак-Элис представил документы, в которых коды длиной 
  
    
      
        n
      
    
    {\displaystyle n}
  
 взламываются за 
  
    
      
        
          2
          
            (
            0
            ,
            5
            +
            o
            (
            1
            )
            )
            n
            
              /
            
            
              
                log
                
                  2
                
              
              ⁡
              n
            
          
        
      
    
    {\displaystyle 2^{(0,5+o(1))n/{\log _{2}n}}}
  
 простых операций. Таким образом, требуется выбирать 
  
    
      
        n
      
    
    {\displaystyle n}
  
 не меньше чем 
  
    
      
        (
        2
        +
        o
        (
        1
        )
        )
        b
        
          log
          
            2
          
        
        ⁡
        b
      
    
    {\displaystyle (2+o(1))b\log _{2}b}
  
 бит, чтобы алгоритму потребовалось как минимум 
  
    
      
        
          2
          
            b
          
        
      
    
    {\displaystyle 2^{b}}
  
 простых операций. Несколько последующих работ сократили количество операций атаки до 
  
    
      
        
          n
          
            
              log
              
                2
              
            
            ⁡
            n
          
        
        =
        
          2
          
            (
            
              log
              
                2
              
            
            ⁡
            n
            
              )
              
                2
              
            
          
        
      
    
    {\displaystyle n^{\log _{2}n}=2^{(\log _{2}n)^{2}}}
  
, но 
  
    
      
        (
        
          log
          
            2
          
        
        ⁡
        n
        
          )
          
            2
          
        
      
    
    {\displaystyle (\log _{2}n)^{2}}
  
 значительно меньше 
  
    
      
        0
        
          ,
        
        5
        n
        
          /
        
        
          
            log
            
              2
            
          
          ⁡
          n
        
      
    
    {\displaystyle 0{,}5n/{\log _{2}n}}
  
, если 
  
    
      
        n
      
    
    {\displaystyle n}
  
 большое. Поэтому улучшенные атаки до сих пор используют 
  
    
      
        
          2
          
            (
            0
            ,
            5
            +
            o
            (
            1
            )
            )
            n
            
              /
            
            
              
                log
                
                  2
                
              
              ⁡
              n
            
          
        
      
    
    {\displaystyle 2^{(0,5+o(1))n/{\log _{2}n}}}
  
 простых операций. Что касается квантовых компьютеров, то их использование приведёт лишь к уменьшению константы 
  
    
      
        0
        ,
        5
      
    
    {\displaystyle 0,5}
  
, что совсем незначительно сократит количество операций, необходимых для взлома этого алгоритма.
 Если система шифрования McEliece так хорошо защищена, то почему она не приходит на смену RSA? Всё дело в эффективности — в частности, в размере ключа. Открытый ключ McEliece использует примерно 
  
    
      
        
          
            n
            
              2
            
          
        
        
          /
        
        4
      
    
    {\displaystyle {n^{2}}/4}
  
 ≈ 
  
    
      
        
          
            b
            
              2
            
          
        
        (
        
          log
          
            2
          
        
        ⁡
        b
        
          )
          
            2
          
        
      
    
    {\displaystyle {b^{2}}(\log _{2}b)^{2}}
  
 бит, в то время как открытому ключу RSA достаточно около 
  
    
      
        (
        0,016
        …
        )
        
          b
          
            3
          
        
        
          /
        
        (
        
          log
          
            2
          
        
        ⁡
        b
        
          )
          
            2
          
        
      
    
    {\displaystyle (0{,}016\dots )b^{3}/(\log _{2}b)^{2}}
  
 бит. Если 
  
    
      
        b
        →
        ∞
      
    
    {\displaystyle b\to \infty }
  
, то 
  
    
      
        
          b
          
            2
            +
            o
            (
            1
            )
          
        
      
    
    {\displaystyle b^{2+o(1)}}
  
 бит для McEliece, будет меньше 
  
    
      
        
          b
          
            3
            +
            o
            (
            1
            )
          
        
      
    
    {\displaystyle b^{3+o(1)}}
  
 бит для RSA, но реальные уровни безопасности, такие как 
  
    
      
        b
        =
        128
      
    
    {\displaystyle b=128}
  
, позволяют RSA иметь открытый ключ в несколько тысяч бит, в то время как для McEliece размер ключа приближается к миллиону бит.
 С 2006 года проводится серия конференций, посвящённых постквантовой криптографии.