In coding theory, rank codes (also called Gabidulin codes) are non-binary[1] linear error-correcting codes over not Hamming but rank metric. They described a systematic way of building codes that could detect and correct multiple random rank errors. By adding redundancy with coding k-symbol word to a n-symbol word, a rank code can correct any errors of rank up to t = ⌊ (d − 1) / 2 ⌋, where d is a code distance. As an erasure code, it can correct up to d − 1 known erasures.
A rank code is an algebraic linear code over the finite field G F ( q N ) {\displaystyle GF(q^{N})} similar to Reed–Solomon code.
The rank of the vector over G F ( q N ) {\displaystyle GF(q^{N})} is the maximum number of linearly independent components over G F ( q ) {\displaystyle GF(q)} . The rank distance between two vectors over G F ( q N ) {\displaystyle GF(q^{N})} is the rank of the difference of these vectors.
The rank code corrects all errors with rank of the error vector not greater than t.
Let X n {\displaystyle X^{n}} be an n-dimensional vector space over the finite field G F ( q N ) {\displaystyle GF\left({q^{N}}\right)} , where q {\displaystyle q} is a power of a prime and N {\displaystyle N} is a positive integer. Let ( u 1 , u 2 , … , u N ) {\displaystyle \left(u_{1},u_{2},\dots ,u_{N}\right)} , with u i ∈ G F ( q N ) {\displaystyle u_{i}\in GF(q^{N})} , be a base of G F ( q N ) {\displaystyle GF\left({q^{N}}\right)} as a vector space over the field G F ( q ) {\displaystyle GF\left({q}\right)} .
Every element x i ∈ G F ( q N ) {\displaystyle x_{i}\in GF\left({q^{N}}\right)} can be represented as x i = a 1 i u 1 + a 2 i u 2 + ⋯ + a N i u N {\displaystyle x_{i}=a_{1i}u_{1}+a_{2i}u_{2}+\dots +a_{Ni}u_{N}} . Hence, every vector x → = ( x 1 , x 2 , … , x n ) {\displaystyle {\vec {x}}=\left({x_{1},x_{2},\dots ,x_{n}}\right)} over G F ( q N ) {\displaystyle GF\left({q^{N}}\right)} can be written as matrix:
Rank of the vector x → {\displaystyle {\vec {x}}} over the field G F ( q N ) {\displaystyle GF\left({q^{N}}\right)} is a rank of the corresponding matrix A ( x → ) {\displaystyle A\left({\vec {x}}\right)} over the field G F ( q ) {\displaystyle GF\left({q}\right)} denoted by r ( x → ; q ) {\displaystyle r\left({{\vec {x}};q}\right)} .
The set of all vectors x → {\displaystyle {\vec {x}}} is a space X n = A N n {\displaystyle X^{n}=A_{N}^{n}} . The map x → → r ( x → ; q ) {\displaystyle {\vec {x}}\to r\left({\vec {x}};q\right)} ) defines a norm over X n {\displaystyle X^{n}} and a rank metric:
A set { x 1 , x 2 , … , x n } {\displaystyle \{x_{1},x_{2},\dots ,x_{n}\}} of vectors from X n {\displaystyle X^{n}} is called a code with code distance d = min d ( x i , x j ) {\displaystyle d=\min d\left(x_{i},x_{j}\right)} . If the set also forms a k-dimensional subspace of X n {\displaystyle X^{n}} , then it is called a linear (n, k)-code with distance d {\displaystyle d} . Such a linear rank metric code always satisfies the Singleton bound d ≤ n − k + 1 {\displaystyle d\leq n-k+1} with equality.
There are several known constructions of rank codes, which are maximum rank distance (or MRD) codes with d = n − k + 1. The easiest one to construct is known as the (generalized) Gabidulin code, it was discovered first by Delsarte (who called it a Singleton system) and later by Gabidulin [2] (and Kshevetskiy [3] ).
Let's define a Frobenius power [ i ] {\displaystyle [i]} of the element x ∈ G F ( q N ) {\displaystyle x\in GF(q^{N})} as
Then, every vector g → = ( g 1 , g 2 , … , g n ) , g i ∈ G F ( q N ) , n ≤ N {\displaystyle {\vec {g}}=(g_{1},g_{2},\dots ,g_{n}),~g_{i}\in GF(q^{N}),~n\leq N} , linearly independent over G F ( q ) {\displaystyle GF(q)} , defines a generating matrix of the MRD (n, k, d = n − k + 1)-code.
where gcd ( m , N ) = 1 {\displaystyle \gcd(m,N)=1} .
There are several proposals for public-key cryptosystems based on rank codes. However, most of them have been proven insecure (see e.g. Journal of Cryptology, April 2008[4]).
Rank codes are also useful for error and erasure correction in network coding.