Niederreiter cryptosystem

From HandWiki

In cryptography, the Niederreiter cryptosystem is a variation of the McEliece cryptosystem developed in 1986 by Harald Niederreiter.[1] It applies the same idea to the parity check matrix, H, of a linear code. Niederreiter is equivalent to McEliece from a security point of view. It uses a syndrome as ciphertext and the message is an error pattern. The encryption of Niederreiter is about ten times faster than the encryption of McEliece. Niederreiter can be used to construct a digital signature scheme.

Scheme definition

A special case of Niederreiter's original proposal was broken[2] but the system is secure when used with a Binary Goppa code.

Key generation

  1. Alice selects a binary (n, k)-linear Goppa code, G, capable of correcting t errors. This code possesses an efficient decoding algorithm.
  2. Alice generates a (nk) × n parity check matrix, H, for the code, G.
  3. Alice selects a random (nk) × (nk) binary non-singular matrix, S.
  4. Alice selects a random n × n permutation matrix, P.
  5. Alice computes the (nk) × n matrix, Hpub = SHP.
  6. Alice's public key is (Hpub, t); her private key is (S, H, P).

Message encryption

Suppose Bob wishes to send a message, m, to Alice whose public key is (Hpub, t):

  1. Bob encodes the message, m, as a binary string em' of length n and weight at most t.
  2. Bob computes the ciphertext as c = HpubeT.

Message decryption

Upon receipt of c = HpubmT from Bob, Alice does the following to retrieve the message, m.

  1. Alice computes S−1c = HPmT.
  2. Alice applies a syndrome decoding algorithm for G to recover PmT.
  3. Alice computes the message, m, via mT = P−1PmT.

Signature scheme

Courtois, Finiasz and Sendrier showed how the Niederreiter cryptosystem can be used to derive a signature scheme .[3][4]

  1. Calculate s=h(d), where h is a Hash Function and d is the signed document.
  2. Calculate si=h(s|i),i=0,1,2,, where | denotes concatenation.
  3. Attempt to decrypt si until the smallest value of i (denoted further as i0) for which si is decryptable is found.
  4. Use the trapdoor function to compute such z that HzT=si0, where H is the public key.
  5. Compute the index Iz of z in the space of words of weight 9.
  6. Use [Iz|z] as the signature.

The Verification algorithm is much simpler:

  1. Recover z from index Iz.
  2. Compute s1=HzT with the public key H.
  3. Compute s2=h(h(d)|i0).
  4. Compare s1 and s2. If they are the same the signature is valid.

The index Iz of z can be derived using the formula below, where i1<<i9 denote the positions of non-zero bits of z.Iz=1+n=19(inn)The number of bits necessary to store i0 is not reducible. On average it will be log2(9!)18.4 bits long. Combined with the average 125.5 bits necessary to store Iz, the signaure will on average be 125.5+18.4144 bits long.

References

  • Henk C. A. van Tilborg. Fundamentals of Cryptology, 11.4.
  1. H. Niederreiter (1986). "Knapsack-type cryptosystems and algebraic coding theory". Problems of Control and Information Theory. Problemy Upravlenija I Teorii Informacii 15: 159–166. 
  2. V. M. Sidel'nikov; S. O. Shestakov (1992). "On the insecurity of cryptosystems based on generalized Reed-Solomon codes". Discrete Mathematics and Applications 2 (4): 439–444. doi:10.1515/dma.1992.2.4.439. 
  3. N. Courtois; M. Finiaz; N. Sendrier (2001). "How to Achieve a McEliece-Based Digital Signature Scheme". Advances in Cryptology — ASIACRYPT 2001. Lecture Notes in Computer Science. LNCS 2248. pp. 163-164. doi:10.1007/3-540-45682-1_10. ISBN 978-3-540-42987-6. 
  4. Makoui, Farshid Haidary; Gulliver, Thomas Aaron; Dakhilalian, Mohammad (17 December 2022). "A new code-based digital signature based on the McEliece cryptosystem". IET Communications (Institution of Engineering and Technology) 17 (10): 1199-1207. 6 April 2023. doi:10.1049/cmu2.12607. https://ietresearch.onlinelibrary.wiley.com/doi/full/10.1049/cmu2.12607.