Entendendo o algoritmo da Intel para reduzir um módulo polinomial e um polinômio irredutível

7

Estou lendo este white paper da Intel sobre multiplicação sem transporte . Descreve a multiplicação de polinômios emGF(2n). Em um nível alto, isso é realizado em duas etapas: (1) multiplicação de polinômios sobreGF(2)e (2) reduzir o módulo de resultado em um polinômio irredutível. Usamos a representação "padrão" de polinômios de cadeia de bits, ou seja,x3+x+1=[1011].

O artigo fornece um algoritmo para o cálculo do polinômio restante na página 16 no algoritmo 3. No entanto, estou tendo problemas para entender o algoritmo de redução nas páginas 16-17 (Algoritmo 4). Essencialmente, acho que precisamos do algoritmo 4 para campos maiores quando nossos resultados parciais ou já não cabem mais em 128 bits. Eles dão um exemplo para a multiplicação de dois polinômios emGF(2128).

De onde vêm as "constantes mágicas" 63, 62 e 57 para os turnos à direita e as "constantes mágicas" 1, 2 e 7 para os turnos à esquerda?

Por exemplo, como generalizar o algoritmo para campos menores, digamos GF(232.)? Os valores de deslocamento correspondentes seriam então 15, 14, 9 e 1, 2, 7?

Na etapa final 4, o algoritmo diz para você "XOR [E1 1:E0 0], [F1 1:F0 0]e [G1 1:G0 0] um com o outro e [X3:D]"

porque nós fazemos isso? Tanto quanto posso ver, o resultado dessa operação XOR não é armazenado em nenhum lugar nem usado em nenhum lugar. De alguma forma, é usado para computação[H1 1:H0 0]?

Gideon
fonte

Respostas:

6

O campo de Galois GF(2128)tem muitas representações "concretas" diferentes. Uma representação popular está usando polinômios emGF(2)[x] (ou seja, com coeficientes em GF(2)) módulo algum polinômio irredutível de grau 128digamos x128+x7+x2+x1 1+x0 0. As constantes mágicas7,2,1 1,0 0provêm desse polinômio irredutível em particular. Você não vê0 0 já que não há necessidade de mudar 0 0. Da mesma forma, as constantes mágicas57,62,63.,64 são os complementos das constantes acima em relação a 64. Novamente, você não precisa mudar64 já que os registros são 64bits de largura. Se tivéssemos usado algum outro polinômio irredutível, as constantes teriam sido diferentes.

Em relação à etapa 4, [H1 1:H0 0] resultados do XORing [E1 1:E0 0],[F1 1:F0 0],[G1 1:G0 0],[X3:D]. Isso implementa a operação de MODing porx128+x7+x2+x1 1+x0 0. A ideia é que modulo esse polinômio,x128=x7+x2+x1 1+0 0; Além disso, é XOR. Os diferentes summands correspondem a esses diferentes monômios - veja se você consegue encontrar a correspondência.

Yuval Filmus
fonte
4

Para completar, detalharei a resposta de Yuval um pouco mais através de um exemplo de multiplicação de dois polinômios UMA e B no GF(216). Deixei

UMA=[0001|1100|1110]=x8+x7+x6+x3+x2+x,
e
B=[0100|0101|0111]=x10+x6+x4+x2+x+1
A multiplicação de UMA e B sobre GF(2) é então
C=[0000|0000|0000|0111|0101|0010|0000|1010].

Em seguida, calculamos para GF(216) o polinômio

q+=x32.+x21+x19+x18+x16+x10+x6+x4+1
Agora queremos multiplicar q+ com os altos bits de Ce mantenha os 32 bits mais altos desse cálculo para processamento posterior. Para esse fim, usamos o algoritmo 4 (Etapa 1-2). Vamos denotarC de [X3:X2:X1 1:X0 0], onde cada XEutem 8 bits. Em seguida, mudamos para a direitaX3 com 28, 26, 22, 16, 14, 13 e, finalmente, com 11. Portanto, temos no total 7 "variáveis ​​temporárias" e as XORamos com X2. Isto resulta em1112, que é o que queríamos.

Na parte inferior do produto da próxima etapa, observe que obtemos os turnos à esquerda de g, definido na página 16.

Gideon
fonte