2026-08-23 13:57:28 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Not.mqh |
|
|
|
|
|
//| Copyright 2026, Niquel Mendoza |
|
|
|
|
|
//| https://www.mql5.com |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#property copyright "Copyright 2026, Niquel Mendoza"
|
|
|
|
|
#property link "https://www.mql5.com"
|
|
|
|
|
#property strict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
|
|
|
|
|
Unca congruencia modular se define como:
|
|
|
|
|
a = b (mod N)
|
|
|
|
|
|
|
|
|
|
Lo que quiere decir que:
|
|
|
|
|
si divbises a y b por separod entre N sus residuos (modulo) son iguales
|
|
|
|
|
|
|
|
|
|
Por lo tnato
|
|
|
|
|
si restas a-b los reidus se anulan por loq eu divir N entre a-b da una division exacta
|
|
|
|
|
con residuo 0
|
|
|
|
|
|
|
|
|
|
A su vez al dar una division exacta, se cumple que, hay un numero K qeu si lo multiplcamos con
|
|
|
|
|
N es igual a (a-b)
|
|
|
|
|
digmoas:
|
|
|
|
|
c = (a-b)
|
|
|
|
|
entonces
|
|
|
|
|
c / n = k (k=cociente) y r=0
|
|
|
|
|
|
|
|
|
|
por lo que
|
|
|
|
|
|
|
|
|
|
c = n*k+0 osea c=n*k
|
|
|
|
|
|
|
|
|
|
Ahora todo esto es una intruddccion vamos con lo de verdad RSA
|
|
|
|
|
en RSA se usa mucho esto.. diria que giura en todo a esto
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aparte hay una propiedad interesnate que luego se usa para obtener el "d" priuvado
|
|
|
|
|
apartir de lo publico
|
|
|
|
|
|
|
|
|
|
El invesro modular (inveso multiplcativo
|
|
|
|
|
numero x que si multicpls con y da 1) dice qeu si tenemos un numero a y queremos buscar su inverso muñltiplciatvio.
|
|
|
|
|
en el sitema normzal R por ejemplo
|
|
|
|
|
|
|
|
|
|
se busca un numero qeu si lo multiplcaos con a da 1
|
|
|
|
|
|
|
|
|
|
a * x = 1
|
|
|
|
|
entonces
|
|
|
|
|
x = 1/a facil
|
|
|
|
|
|
|
|
|
|
El tema es que en aritmem modular solo existen enteros no fraciones
|
|
|
|
|
Tampoco es que las pdoamso represtar dado que nuestro Z esta actoac a N (valor del modulo) valores
|
|
|
|
|
Ni mas ni mesno
|
|
|
|
|
|
|
|
|
|
Asi qeu ahi va masmoes igual solo que:
|
|
|
|
|
|
|
|
|
|
a*x = 1 (mod N)
|
|
|
|
|
|
|
|
|
|
Dice x cuimple qeu si lo mutlcionas por a y divos todo eso por N obtner un resto de 1...
|
|
|
|
|
Esto se usa como dije para el cauclo de d (pero con N = phi(n))
|
|
|
|
|
Ademas para que exista x se cumple qeu
|
|
|
|
|
|
|
|
|
|
gdc(a, n) = 1 (son coprimos)
|
|
|
|
|
|
|
|
|
|
Esto se demuesta como:
|
|
|
|
|
supongoamos que d = gdc(a, n) = d > 1 osea a o n son compuestos
|
|
|
|
|
entonces:
|
|
|
|
|
a | d y n | d
|
|
|
|
|
|
|
|
|
|
Por contradicion digmoas que si existe un inversox que cumpla es decir
|
|
|
|
|
|
|
|
|
|
a*x = 1 (mod N)
|
|
|
|
|
|
|
|
|
|
Usando una propeida que meicone antes eso quere deicr que
|
|
|
|
|
|
|
|
|
|
(ax-1) / n da una division exacta
|
|
|
|
|
|
|
|
|
|
por lo que (usando la deinficno de division)
|
|
|
|
|
|
|
|
|
|
(ax-1) = n * y (donde y es un entero)
|
|
|
|
|
|
|
|
|
|
rescribiendo:
|
|
|
|
|
|
|
|
|
|
ax-ny=1
|
|
|
|
|
|
|
|
|
|
pero tambein = a = d * k y n = d * z
|
|
|
|
|
|
|
|
|
|
(dk)x - (dz)y = 1
|
|
|
|
|
|
|
|
|
|
d(kx - zy) = 1
|
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
|
|
d * j = 1
|
|
|
|
|
|
|
|
|
|
eso quiere decir qeu si multoapcl d por un numero J nos da 1..
|
|
|
|
|
pero dijisqmos que D > 1
|
|
|
|
|
enotnces no eixtne ningun numero en este sistema que si lo multpcloas por d nos de 1
|
|
|
|
|
por ejemplo si d fuera 2 * x = 1 x debria de ser 1/2 pero dijismos que eso no eixte
|
|
|
|
|
en este sitema
|
|
|
|
|
|
|
|
|
|
Aparte ioncialete dijismoq que para que d¨*j sea vlaidao para en caso exista
|
|
|
|
|
dicho inverso neceisaria d=1
|
|
|
|
|
lo cual unciamte se cumple para coprimos..
|
2026-08-24 09:56:46 -05:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
// Inverso modular
|
|
|
|
|
// En aritmaetica modular que luego se usa en RSA por jemeplo
|
|
|
|
|
// Neceistmoas un inverso x que se deifne como
|
|
|
|
|
// (x*a) = 1 (MOD n)
|
|
|
|
|
// Osea un numero x que al multiplcarlo por 1 y esto lo dividmos por n
|
|
|
|
|
// su resto sea 1
|
|
|
|
|
// para esto se cumple que gdc(n,a)=1 osea n y a son coprimos
|
|
|
|
|
// Ahora para encontralo usaremos un teroema del gdc:
|
|
|
|
|
// tal que:
|
|
|
|
|
// gdc(a,b) = ax+by
|
|
|
|
|
// En nuestro caso como defines qeu el gdc=1
|
|
|
|
|
// entonces:
|
|
|
|
|
// ax+by=1
|
|
|
|
|
// ahora:
|
|
|
|
|
// a=this, b=n (mod)
|
|
|
|
|
// si lo ecrimos como un mod
|
|
|
|
|
// ax+by = 1 (MOD n)
|
|
|
|
|
// pero
|
|
|
|
|
// this * x + n * y = 1 (mod n) ny es multiplo de N
|
|
|
|
|
// por loq ue n * y no afecta en esta operacion (es como que da una veulta completa)
|
|
|
|
|
// asi que this * x = 1 (mod n) justo lo qeu buscamosm incialete
|
|
|
|
|
// entonces esta funcino retorna dicho x
|
2026-08-23 13:57:28 -05:00
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
//+------------------------------------------------------------------+
|