In cryptography, the Niederreiter cryptosystem is a variation of the McEliece cryptosystem developed in 1986 by Harald Niederreiter. 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 but the system is secure when used with a Binary Goppa code.
Key generation Alice selects a binary (n, k)-linear Goppa code, G, capable of correcting t errors. This code possesses an efficient decoding algorithm. Alice generates a (n − k) × n parity check matrix, H, for the code, G. Alice selects a random (n − k) × (n − k) binary non-singular matrix, S. Alice selects a random n × n permutation matrix, P. Alice computes the (n − k) × n matrix, Hpub = SHP. 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):
Bob encodes the message, m, as a binary string em' of length n and weight at most t. 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.
Alice computes S−1c = HPmT. Alice applies a syndrome decoding algorithm for G to recover PmT. 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 .
Calculate s = h ( d ) {\displaystyle s=h(d)} , where h {\displaystyle h} is a Hash Function and d {\displaystyle d} is the signed document. Calculate s i = h ( s | i ) , i = 0 , 1 , 2 , … {\displaystyle s_{i}=h(s|i),i=0,1,2,\dots } , where | {\displaystyle |} denotes concatenation. Attempt to decrypt s i {\displaystyle s_{i}} until the smallest value of i {\displaystyle i} (denoted further as i 0 {\displaystyle i_{0}} ) for which s i {\displaystyle s_{i}} is decryptable is found. Use the trapdoor function to compute such z {\displaystyle z} that H z T = s i 0 {\displaystyle Hz^{T}=s_{i_{0}}} , where H {\displaystyle H} is the public key. Compute the index I z {\displaystyle I_{z}} of z {\displaystyle z} in the space of words of weight 9. Use [ I z | z ] {\displaystyle \left[I_{z}|z\right]} as the signature. The Verification algorithm is much simpler:
… excerpt ends here. Continue reading the full article.
