caso de estudio: inversión...
TRANSCRIPT
![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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042207/5ea99979a5cff1464d3ac3bf/html5/thumbnails/50.jpg)
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