From 80f7395004e05d5186fd9b8a0a662d74203d793d Mon Sep 17 00:00:00 2001 From: Maximilian Stauss <max.stauss@gmail.com> Date: Wed, 6 Sep 2017 10:42:28 +0200 Subject: [PATCH] =?UTF-8?q?Quellcode=20aufr=C3=A4umen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/MatsumotoImaiA.py | 20 ++++++++++++-------- classes/MatsumotoImaiAExample.py | 1 - keys/bsp_uov_old.priv | Bin 2023 -> 0 bytes test.py | 28 ---------------------------- test_MIA.py | 27 +++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 37 deletions(-) delete mode 100644 keys/bsp_uov_old.priv delete mode 100644 test.py create mode 100644 test_MIA.py diff --git a/classes/MatsumotoImaiA.py b/classes/MatsumotoImaiA.py index d892841..d4baee3 100644 --- a/classes/MatsumotoImaiA.py +++ b/classes/MatsumotoImaiA.py @@ -3,6 +3,9 @@ from __future__ import absolute_import, print_function from sage.all import * +from sys import exit + +from .helpers.sage_extensions import random_value, random_invertible_matrix from .helpers.AffineTransformation import AffineTransformation from .helpers.PrivateKey import PrivateKey @@ -36,20 +39,23 @@ class MatsumotoImaiA(EncryptionScheme): ring = PolynomialRing(k, 'x') (x,) = ring.gens() + gx = ring.irreducible_element(n) q = len(k) # alle Kandidaten für theta werden gesucht thetas = [] qn = q**n - 1 - for theta in xrange(1, n - 1): + for theta in xrange(1, n): qd = q**theta + 1 (common_divider, t, _) = xgcd(qd, qn) - if common_divider == 1: + if common_divider == 1 and t > 0: thetas.append((theta, t)) # ein zufälliges Theta wird ausgewählt - print(len(thetas)) + if len(thetas) < 1: + exit('Kein theta gefunden') + (self.theta, self.theta_invers) = thetas[int(random() * len(thetas))] S = AffineTransformation( @@ -58,8 +64,7 @@ class MatsumotoImaiA(EncryptionScheme): random_invertible_matrix(k, n), random_vector(k, n)) # der Erweiterungskörper wird gebaut - gx = ring.irreducible_element(n) - multivariate_ring = PolynomialRing(k, n) + multivariate_ring = PolynomialRing(k, 'x', n) extension_field = PolynomialRing( multivariate_ring, 't').quotient_ring(gx, 'T') self.extension_field = extension_field @@ -67,7 +72,7 @@ class MatsumotoImaiA(EncryptionScheme): Sx = list(S(vector(multi_vars))) - pre_F = self.phi_invers(Sx) + pre_F = self.phi_inv(Sx) # F(X) post_F = pre_F * pre_F**(4**theta) @@ -80,5 +85,4 @@ class MatsumotoImaiA(EncryptionScheme): def invert_MQ(self, msg): X = self.phi_inv(list(msg)) - X = X**self.theta_invers - return vector(self.phi(X)) + return vector(self.phi(X**self.theta_invers)) diff --git a/classes/MatsumotoImaiAExample.py b/classes/MatsumotoImaiAExample.py index 228e825..9f3450c 100644 --- a/classes/MatsumotoImaiAExample.py +++ b/classes/MatsumotoImaiAExample.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, print_function from sage.all import * -import copy as cp from .helpers.sage_extensions import random_value, random_invertible_matrix diff --git a/keys/bsp_uov_old.priv b/keys/bsp_uov_old.priv deleted file mode 100644 index b58b64b7dff26ab5dfef0d56e179a060c63bb4f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2023 zcmZo*(nwCuNh~f-E!N9O%_&GND%NvMOUukl4Jk^@D^ANV%1tcE%+KS(Dp<&vU&vHj z$gB~{Seaa$n4YSao1apelUl4-mYQ6WUlgC4pOP1!lA2eX%2k?IkeQsFlNw)U$W_Rq z0a0FDQdF8;Qd*R%mzD_9P|1~^nwMIXnH&%0$HTO76|&;glarsHU0M*Io|B)Hn8Q`b z7Ru#Tl$z=bc1j_8YfvGFH@i2hH)DGtr$z>=Mh06bw_9djW=X1BW@=7KAy;cqA$JBR z)cB&zy!2wd%)FA+^wc7*+{EnEco?UUCzR2&HK>p`l(C|<kk2oa1?0a%{!pgs+6>+d zo=`@^)}TUxj*>#b+LA({ph979=1#woLXp~%LeZc?vDiX!6id>;j)+IG5fo%xzWFI! zg%ThGja!2XB|!|3y;2#%?Lmdo8DJTZRWcb6Az6qJNU<DLNIun@*_*YaB&bj!l+hOw z+PR4(MVS?P5Xt}^BV2`wP-j78pb9`Pfks|@T26jq370QeKc;x062yE&Y?kI_7M7;Q z7o`>yr52~=l|a%^X<kukN@;Q`SD`XQ1FC(+1&PV2P)mZr>_Qcd3}J6(Z|2TW*0h|= zyplrIlG^q{wV*=v&e}qaQ0A1>l0r>{=e3}o*Dm&E><Hy#WMN@qU}9usYWL<U2`bbn zO^Pklg?bed=mq&Xm3jHOnTa`ixurQJnehmL_?*n7;>^7C(wxL1cu>Xr2EcWoC@9o} z_=s|2gEI5dQH|Em5DsOkFeo$#WvVbNGz?{`Fe)@^FEqwsV@YaJZhU@GN@@{TNNQ28 zKbTc$qS;tzT3cwQ5y~46^HzLuNl~GBC{s#7p+zW1e0geSdPYfcp`~9adpsm+3a$J? zS>y8(b5jegLpf7Y(~DBea#AY_Z9@6ta}$#jOLGz{jljm(hO)Z{rIz`mRutNWiXg1W z%`Zw#%E?d8E-tk9W(Z}E&q>WoFUcr$@MaF>iqB0<&rJmDcMRoJf|{;W=oHExAD@z+ z93Nlk93sTXz`*4KvN~0vD77rLs5n(2C$%CoIX}H9u^=NeSwREtFii!J?-jtl*W=>y zNi9)Gh)GFJ*Qkg~)KsulNQ^gB&{jx{H&W16h)KyWDF*ZM5_A+wGE(!n5-Q>n6>JnL z;*t^+GSd_i^HLP@^KvRdY$RiB6re^XX(lM-7opmKB$b$#!c~%yT9m4gT9H{?Qml|* zs1TErs*njL^AZ$_OOrDcN-`2l6cQ5S^Av0qlH&7pAnwvpNQ|$})HbXIi-K7op-crk zg{1h*1U;@omr(Y2Xu!H^mL|0a6}r_Hy5maSpmd#*nOp)X&|E`G3vyDq3O#BIJ-r#c z8H>G{+ky(cAQ{P|HK@=Vnvr}mJZiymz8N59p`SN{Hxop)KSU(Jn-Qiz5TYMc3I##+ z2WNQH7KV5;!IXq%fJMSIK(>N}OTngxXZV!11r<hQ=w-Oo7Dj4-bVY%bK&*;}7z`@$ zVxR`cf|SHTjA8U<gcuVKHXUqY0>pKR2=^v|B@2_i;qFa=7;DrTRG11iHVtHKI>=!V zn=>GqG9eZ*!7R$kNCUYyJ5?itF~2aUwlEh|17@&*YZs0TPEe`E1S<LSYD)_9g9-~` z3kx+Mwi&br6&68lD@F*FK!r+Ey_q1zc3CK+Z-$~qhEj%d2Dlhx@@DGH0GEH|L4_5a hwS|=#(4r3%FjY_ks=-Ac3nK#qBc#-;DNSnE0|4RgtZ)DT diff --git a/test.py b/test.py deleted file mode 100644 index 8d6db94..0000000 --- a/test.py +++ /dev/null @@ -1,28 +0,0 @@ -from __future__ import absolute_import, division, print_function -from sys import exit -from sage.all import * - -from classes.helpers.AffineTransformation import * - -k = GF(4, 'a') # hat modulus x^2 + x + 1 -(a,) = k.gens() -n = 3 - -ring = PolynomialRing(k, 'x') -(x,) = ring.gens() -gx = x**3 + x + 1 - -K = ring.quotient_ring(gx, 'X') - -q = len(k) - -thetas = [] -qn = q**n - 1 -print("qn =", qn) -for theta in xrange(1, n): - qd = q**theta + 1 - print("qd =", qd) - (common_divider, t, _) = xgcd(qd, qn) - if common_divider == 1: - thetas.append((theta, t)) -thetas diff --git a/test_MIA.py b/test_MIA.py new file mode 100644 index 0000000..062882a --- /dev/null +++ b/test_MIA.py @@ -0,0 +1,27 @@ +#!/usr/bin/sage +# -*- coding: utf-8 -*- + +from __future__ import absolute_import, division, print_function +from sage.all import * + +from classes.MatsumotoImaiA import MatsumotoImaiA + +n = 5 # bitte prim wählen +finite_field = GF(2**8, 'a') + +"""TEST MIA""" + +# Initialize simple MIA +MIA = MatsumotoImaiA(finite_field, n) +public_key = MIA.public_key + +# use a random vector +msg = random_vector(finite_field, n) +print("msg =", msg) + +# Nachricht verschlüsseln +enc = public_key.encrypt(msg) +print("public_key.encrypt(msg): enc =", enc) + +# Verifizieren, dass enc auch entschlüsselt wird +print("MIA.decryt(enc):", MIA.decrypt(enc)) -- GitLab