50
1 Aritmética Computacional 2007 Caso de Estudio: Inverso Modular Caso de Estudio: Inversión modular Arturo Díaz-Pérez Departamento de Computación Laboratorio de Tecnologías de Información CINVESTAV-IPN

Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

1Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Caso de Estudio: Inversión modular

Arturo Díaz-PérezDepartamento de Computación

Laboratorio de Tecnologías de InformaciónCINVESTAV-IPN

Page 2: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

2Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Importancia

La inversión modular es esencial en la criptografía de llave pública.

Es una operación básica en la criptografía de curvas elípticas (ECC).

ECC se encuentra definida frecuentemente sobre los campos finitos GF(p) y GF(2m).

Dados a y p, (a ∈ [0,p-1]), el problema es hallar a-1 ∈ [0,p-1], tal que, a a-1 mod p = 1

Page 3: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

3Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Inverso Modular de Montgomery

Inverso Modular de Montgomery:MonInv(a2m, p) = a–12m (mod p)r = AlmMonInv( a2m, p) = a–12k–m (mod p) x = MonInv( r, p, k) = a–12m (mod p)

Modificación:ModInv(a, p) = a–1 (mod p)r = AlmMonInv( a, p ) = a–12k (mod p) x = ModInv( r, p, k ) = a–1 (mod p)

Page 4: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

4Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Algoritmo: Fase 1Fase I: Almost Montgomery Inverse

AlmMonInv (a, p)Entrada: a ∈ [1, p – 1] y pSalida: r y k, donde r = a–1 2k (mod p) y m ≤ k ≤ 2m

u := p, v := a, r := 0, s := 1, k := 0while ( v > 0) do begin

if u is even then u := u/2, s := 2selse if v is even then v := v/2, r := 2relse if u > v then

u := (u – v)/2, r := r + s, s := 2selse

v := (v – u)/2, s := s + r, r := 2rk := k + 1

endif r ≥ p then r := r – p r := p – rreturn r, k

Page 5: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

5Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Algoritmo: Fase 2Fase II: Real Modular Inverse

ModInv (r, p, k)Entrada: r, p y k Salida: x, donde x = a–1 (mod p)

for i = 1 to k doif r is even then

r := r/2else

r := (r + p)/2x := rreturn x

Page 6: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

6Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

int AlmMontInv1( unsigned int a, unsigned int p, unsigned int *ro, unsigned int *ko ){

unsigned int u, v, r, s, k;

u = p; v = a; r = 0; s = 1; k = 0;

while( v > 0 ) {if( !(u & 01) ) {u = u >> 1;s = s << 1;

} else if( !(v & 01) ) {v = v >> 1;r = r << 1;

} else if( u > v ) {u = (u-v) >> 1;r = r + s;s = s << 1;

} else { /* v >= u ) */v = (v-u) >> 1;s = s + r;r = r << 1;

}k++;

}if( r >= p ) r = r - p;

r = p - r;*ro = r; *ko = k;

}

Page 7: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

7Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

unsigned int ModInv( unsigned int r, unsigned int p, unsigned int k ){

unsigned int i;

for( i = 1; i <= k; i++ ) {if( !( r & 01) )

r = r >> 1;elser = (r+p) >> 1;

}

return r;}

Page 8: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

8Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Montgomery 1while( v > 0 ) {

if( (u & 0x07) == 0x00 ) {u = u >> 3;s = s << 3;k = k + 3;

} else if( (u & 0x07) == 0x04 ) {u = u >> 2;s = s << 2;k = k + 2;

} else if( (u & 0x03) == 0x02 ) {u = u >> 1;s = s << 1;k = k + 1;

} else if( (v & 0x07) == 0x00 ) {v = v >> 3;r = r << 3;k = k + 3;

} else if( (v & 0x07) == 0x04 ) {v = v >> 2;r = r << 2;k = k + 2;

} else if( (v & 0x03) == 0x02 ) {v = v >> 1;r = r << 1;k = k + 1;

}. . .

}...

Page 9: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

9Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Montgomery 1 (Cont.)

while( v > 0 ) {. . . } else if( u > v ) {

u = (u-v) >> 1;r = r + s;s = s << 1;k = k + 1;

} else { /* v >= u ) */v = (v-u) >> 1;s = s + r;r = r << 1;k = k + 1;

}}if( r >= p ) r = r - p;

r = p - r;*ro = r; *ko = k;

Page 10: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

10Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Montgomery 2 (Modificación)while( v > 0 ) {. . .} else {x = u - v;y = v - u;z = r + s;if( u > v ) {u = x >> 1;r = z;s = s << 1;

} else { /* v >= u ) */v = y >> 1;s = z;r = r << 1;

}k = k + 1;

}}x = p - r;y = 2*p - r;if( p >= r ) r = x;

elser = y;

*ro = r; *ko = k;

Page 11: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

11Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

AlmMonInv: Fase 1Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1; } goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 7 6. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if( v ≠ 0 ) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

Page 12: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

12Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

ModInv: Fase 2

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0; 2. if(i = k) then goto 7;3. if(x0 = 0) then { x = ShiftR(u, 1);} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

Page 13: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

13Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Port Map: Fase I

LOADA

DATAIN

LOADP

n

G RST

RESULTn

DATARDY

Km

CLK

Page 14: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

14Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

IDLEIDLE

G

u ← p; v ←a;r ← 0; s ←1;x ← 0; y ←0;z ← 0; k ←0;DataRdy ←0;

0 1

DIVU

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0;2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

FROM FINAL

Page 15: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

15Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

DIVURegistros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

DIVU

u2u1u0=000

u ← ShiftR(u,3);s ← ShiftL(s,3);

k ← k + 3

1 0

u2u1u0=100

u ← ShiftR(u,2);s ← ShiftL(s,2);

k ← k + 2

0

u2u1u0=x10

u ← ShiftR(u,1);s ← ShiftL(s,1);

k ← k + 1

1

1

DIVU1

DIVU2

0

DIVV

Page 16: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

16Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

DIVVRegistros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

DIVV

v≠0 &v2v1v0=000

v ← ShiftR(v,3);r ← ShiftL(r,3);

k ← k + 3

01

v2v1v0=100

v ← ShiftR(v,2);r ← ShiftL(r,2);

k ← k + 2

0

v2v1v0=x10

v ← ShiftR(v,1);r ← ShiftL(r,1);

k ← k + 1

1

1

SUB

0

DIVV2

DIVV1

Page 17: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

17Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

SUB

x ← Subtract(u,v);y ← Subtract(v,u);

z ← Addr(r,s);

SUB

xborrow

u ← ShiftR(x,1);r ← z;

s ← ShiftL(s,1);

10

v ← ShiftR(y,1);s ← z;

r ← ShiftL(r,1);

ADD-K

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 7 3. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

Page 18: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

18Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

ADD-K

k ← k+1;

ADD-K

v≠001

SUBFDIVU

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

Page 19: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

19Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

SUBF

x ← Subtract(p,r);y ← Subtract(2p,r);

SUBF

xborrow

Result ← x;

10

Result ←y;

FINAL

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1; } goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1; } goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

Page 20: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

20Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

FINAL

FINAL

DataReady ← 1;

RST0 1

IDLE

Page 21: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

21Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers u and v

REGISTER MicroOperation Control SignalName

Control Expression

Register v v ← av ← ShiftR(v,3)v ← ShiftR(v,2)v ← ShiftR(v,1)v ← ShiftR(y,1)

LOADAShiftRV3ShiftRV2ShiftRV1ShiftRV-Y

IDLE•GDIVV•(v≠0&v2v1v0 = 000)DIVV1•(v2v1v0 = 100)DIVV2•(v2v1v0 = 110)SUB•(xborrow)

Register u u ← pu ← ShiftR(u,3)u ← ShiftR(u,2)u ← ShiftR(u,1)u ← ShiftR(x,1)

LOADPShiftRU3ShiftRU2ShiftRU1ShiftRU-X

IDLE•GDIVU•(u≠0&u2u1u0 = 000)DIVU1•(u2u1u0 = 100)DIVU2•(u2u1u0 = 110)SUB•(xborrow)’

Page 22: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

22Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register u

Reg. u

ShiftR3

ShiftR2

ShiftR1

x

p

ShiftR1

ShiftRU2

ShiftRU1

ShiftRU-X

LOADP

ShiftRU3

Page 23: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

23Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register v

Reg. v

ShiftR3

ShiftR2

ShiftR1

y

a

ShiftR1

ShiftRV2

ShiftRV1

ShiftRV-Y

LOADA

ShiftRV3

Page 24: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

24Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers s and r

REGISTER MicroOperation Control SignalName

Control Expression

Register r r ← 0r ← ShiftL(r,3)r ← ShiftL(r,2)r ← ShiftL(r,1)r ← zr ← ShiftL(r,1)

InitShiftRV3ShiftRV2ShiftRV1ShiftRV-Y’ShiftRV-Y

IDLE•GDIVV•(v≠0&v2v1v0 = 000)DIVV1•(v2v1v0 = 100)DIVV2•(v2v1v0 = 110)SUB•(xborrow)’SUB•(xborrow)’

Register s s ← 1s ← ShiftL(s,3)s ← ShiftL(s,2)s ← ShiftL(s,1)s ← zs ← ShiftL(s,1)

InitShiftRU3ShiftRU2ShiftRU1ShiftRU-X’ShiftRU-X

IDLE•GDIVU•(u≠0&u2u1u0 = 000)DIVU1•(u2u1u0 = 100)DIVU2•(u2u1u0 = 110)SUB•(xborrow)SUB•(xborrow)’

Page 25: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

25Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register s

Reg. s

ShiftL3

ShiftL2

ShiftL1

1

z

ShiftRU2

ShiftRU1 or ShiftRU-X

ShiftRU-X’

Init

ShiftRU3

Page 26: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

26Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register r

Reg. s

ShiftL3

ShiftL2

ShiftL1

0

z

ShiftRV2

ShiftRV1 or ShiftRV-Y

ShiftRV-Y’

Init

ShiftRV3

Page 27: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

27Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Register k

REGISTER MicroOperation Control SignalName

Control Expression

Register k k ← 0k ← k+3k ← k+2k ← k+1

InitShiftRV3ShiftRV2ShiftRV1

IDLE•GDIVV•(v≠0&v2v1v0 = 000)DIVV1•(v2v1v0 = 100)DIVV2•(v2v1v0 = 110)

Register k k ← k+1 AddK ADD-K

Register k k ← 0k ← k+3k ← k+2k ← k+1

InitShiftRU3ShiftRU2ShiftRU1

IDLE•GDIVU•(u≠0&u2u1u0 = 000)DIVU1•(u2u1u0 = 100)DIVU2•(u2u1u0 = 110)

Page 28: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

28Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register k

Reg. k

Add1

Add2

Add3

0

Init or AddK

ShiftRU3 or ShiftRV3

ShiftRU2 or ShiftRV2

ShiftRU1 or ShiftRV1

Page 29: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

29Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register k Modificado

Reg. k

Add

0

ShiftRU1 or ShiftRV1

Init or AddKShiftRU2 or ShiftRV2

ShiftRU3 or ShiftRV3

123

ShiftRU3 or ShiftRV3or

ShiftRU2 or ShiftRV2or

ShiftRU1 or ShiftRV1

Page 30: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

30Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers x, y, z

REGISTER MicroOperation Control SignalName

Control Expression

Register y y ← 0y ← Substract(v,u)y ← Substract(2p,r)

InitSubSubF

IDLE•GSUBSUBF

Register z z ← 0z ← Addr(r, s)

InitSub

IDLE•GSUB

Register x x ← 0x ← Substract(u.v)x ← Substract(p,r)

InitSubSubF

IDLE•GSUBSUBF

Page 31: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

31Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register x

Reg. x

Sub

Sub

p

r

u

0

Sub

Init

v

xborrow

SubF

Page 32: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

32Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register x Modificado

Reg. x

Sub

0

SubF or Sub

Init

u

v

p

r

xborrowandSub

SubF

Sub

SubF

Sub

Page 33: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

33Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register y

Reg. y

Sub

Sub

0

SubF

Sub

Init

v

u

ShiftR2p

r

Page 34: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

34Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register y Modificado

Reg. y

Sub

0

SubF or Sub

Init

v

u

p

rSubF

Sub

SubF

Sub

ShiftR2

Page 35: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

35Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register z

Reg. z

Add

r

0

Sub

Init

s

Page 36: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

36Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers DataRdy & Result

REGISTER MicroOperation Control SignalName

Control Expression

Register Result Result ← 0Result ← xResult ← y

InitResXResY

IDLE•GSUBF•(xborrow)’SUBF•(xborrow)

Register DataRdy DataRdy ← 0DataRdy ← 1

InitDataReady

IDLE•GFINAL

Page 37: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

37Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: DataRdy & Result

0 0

1

Sub

Init

DataRdy

y

ResX

Init

Resultx

n

n

n

n

ResY

Page 38: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

38Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Diagrama de Estados

UZ u = 0

DIVU8 u2u1u0 = 000

DIVU4 u2u1u0 = 100

DIVU2 u2u1u0 = x10

VZ v = 0

DIVV8 v2v1v0 = 000

DIVV4 v2v1v0 = 100

DIVV2 v2v1v0 = x10

T0

G=0

T1

DIVV2

T2

DIVV1 DIVV

IDLE DIVU DIVU1 DIVU2

SUB

ADD-K SUBF FINAL

G=1DIVU8

DIVU8’ DIVU4’

DIVU4

VZ’ and DIVV8

VZ or DIVV8’

DIVV4’

DIVV4

VZVZ’ RST=0

RST=1

T3

T4

T5T6T7

T8 T9T10

Page 39: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

39Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath+Control

InitShiftRU3ShiftRU2ShiftRU1

ShiftRU-XShiftRV3ShiftRV2ShiftRV1

ShiftRV-YAddK

SubSubFResXResY

DataReady

T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10

UZVZDIVU8DIVU4DIVU2DIVV8DIVV4DIVV2

GRSTCLK

xborrow

Datapath Control Unit

State

Control Signals

LOADA

DATAIN

LOADP

n

CLK

G

RST

11

15RESULT

DATARDYK

nn

Page 40: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

40Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Port Map: Fase II

P

R

K

n

CE RST

RESULTn

DATARDY

n

n

CLK

Page 41: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

41Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

IDLE-2IDLE-2

CE

x ← r; i ← 0;z ← 0;

DataRdy ←0;

1 0

LOOP1

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0; 2. if(i = k) then goto 5;3. if(x0 = 0) then { x = ShiftR(x, 1);} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

FROM FINAL2

Page 42: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

42Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

LOOP1, LOOP2, INC-ILOOP1

i == k01

x0=0

x ← ShiftR(x,1);

1 0

z ← Add(r,p);x ← ShiftR(z,1);

INC-I

LOOP2

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0;2. if(i = k) then goto 5;3. if(x0 = 0) then { x = ShiftR(x, 1);} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

FINAL2

i ← i+1;

Page 43: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

43Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

FINAL2

FINAL2

Result ← x;DataReady ← 1;

RST0 1

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0;2. if(i = k) then goto 5;3. if(x0 = 0) then { x = ShiftR( x, 1 );} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

IDLE-2

Page 44: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

44Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers x, i, z, DataRdy, Result

REGISTER MicroOperation Control SignalName

Control Expression

Register i i ← 0i ← i+1

InitIncI

IDLE2•CE’INC-I

Register z z ← 0z ← Add(r, p)

InitAddR&P

IDLE2•CE’LOOP2 •(x0=0)

DataRdy DataRdy ← 0DataRdy ← 1

InitDataReady

IDLE2•CE’FINAL2

Result Result ← x DataReady FINAL2

Register x x ← rx ← ShiftR(x, 1)x ← ShiftR(z, 1)

InitShiftRx1ShiftRz1

IDLE2•CE’LOOP2 •(x0=1)LOOP2 •(x0=0)

Page 45: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

45Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register i

Reg. i

ADD

0

IncI

Init

1

x0

Page 46: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

46Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register z

Reg. z

ADD

r

0

AddR&P

Init

p

x0

Page 47: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

47Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register x

Reg. x

ShiftRx1

ShiftRz1

r

ShiftRx1

ShiftRz1

Init

zx0

Page 48: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

48Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Diagrama de Estados

CE=1

CMPIK i == k

XPAR x0 = 0

S0 S1

FINAL2

S2IDLE2 LOOP1 LOOP2 INC-I

CE=0

S3

CMPIK’

CMPIK

S4

RST=0

Page 49: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

49Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Fase 2: Unidad de Control

InitShiftRx1ShiftRz1

IncIAddR&P

DataReady

S0 S1 S2 S3 S4

CMPIKXPAR

CERSTCLK

Datapath Control

State

Control Signals

RESULT

DATARDYK

P

CE

AINV

Page 50: Caso de Estudio: Inversión modulardelta.cs.cinvestav.mx/~francisco/arith/03-Montgomery...Aritmética Computacional 2007 2 Caso de Estudio: Inverso Modular Importancia La inversión

50Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Diseño Circuito

Fase 1 Fase 2

Datapah Control

LOADA

DATAIN

LOADP

G

RST

ROUT

POUT

KOUT

AINV

DATARDYRIN

PIN

KIN Datapah Control

RDY CE