Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 32
##Aufgabenblatt 2 ##Aufgabe 1 def str2num(s): digits = [symbols.find(c) for c in s] return ZZ(digits,len(symbols)) def num2str(n): s = ''.join([symbols[digit] for digit in n.digits(len(symbols))]) return s c1 = str2num(qk-PRZ@e6Ci@yfYE3mq0w0!5eBbF) c2 = str2num(n;rcCJ8kV 494Qn,F;Ng,d@+(XbD) n1 = 17a71c70442ae965d97daac984bf7af2adc200000acd n2 = a83291573a14b2a16f2b04772f1b5db53248000037d me = crt(c1,c2,n1,n2) m = power(me, 1/2) m = num2str(m) m ##Aufgabe 2 def compositeTest(n): a = random_element() if power(a,n) == mod(a,n) : return "prime" else return "composite" ##Aufgabe 3 def Pollard_p_minus_1(n, B): a = random_element(2,n) while gcd(a,n) != 1 : a = random_element(2,n) m = 1 for j in range(B+1) : if is_prime(j) == true : x = (log(B,j) x.round(mode='down') x = power(j,x) m = m * x d = gcd(power(a, m) 1, n) if d == 1 : B = power(B, 4/3) a = random_element(2,n) while gcd(a,n) != 1 : a = random_element(2,n) m = 1 for j in range(B+1) : if is_prime(j) == true : x = (log(B,j) x.round(mode='down') x = power(j,x) m = m * x if d == n : B = power(B, 3/4) a = random_element(2,n) while gcd(a,n) != 1 : a = random_element(2,n) m = 1 for j in range(B+1) : if is_prime(j) == true : x = (log(B,j) x.round(mode='down') x = power(j,x) m = m * x if d == n || d == 1 : return -1 else return d ##Aufgabe 4 def Fermat(n, niter=10**6): x = 0 t = power(n, 1/2) t.round(mode='down') t = t + 1 while is_square(power(t,2) - n) != true : t = t + 1 x = x + 1 s = power(power(t,2) - n, 1/2) if x = 1000000 : return (-1,-1) return (t + s, t - s) ##Aufgabe 5 ##5.a) def generate_Elgamal_key_pair(p,g): a = random_element(1,p-1) while gcd(a,p) != 1 : a = random_element(1,p-1) A = power_mod(g,a,p) b = random_element(1,p-1) while gcd(b,p) != 1 : b = random_element(1,p-1) B = power_mod(g,b,p) return (p,g,A), (p,g,B) ##5.b) def encrypt(m,(p,g,B)): c = power_mod(power(A,r) * m,1,p) return (B,c) def decrypt((C1,C2),(p,g,A)): m = power_mod(power(C1,p-1-a) * C2,1,p) m = num2str(m) return m ##5.c) p = random_prime(2^1024 - 1,False,2^1023) g = primitive_root(p) ##5.d) generate_Elgamal_key_pair(p,g) ##Ergebnis: (p,g,A), (p,g,B) mit p = 1024 bits lang m = "Adrian Kehr" m = str2num(m) encrypt(m,(p,g,B)) decrypt((C1,C2),(p,g,A)) ##Ergebnis: m: "Adrian Kehr" ##Aufgabe 6 ##6.a) def generate_key_pair(p,g): a = random_element(1,p-1) A = power_mod(g,a,p) return (a,A) ##6.b) def generate_common_secret(p,a,B): k = power_mod(B,a,p) return k ##6.c) p = random_prime(2^2048 - 1,False,2^2047) g1 = primitive_root(p) g2 = primitive_root(p) while g2 == g1 : g2 = primitive_root(p) ##1. Instanzierung generate_key_pair(p,g1) ##Ergebnis: (a,A) generate_key_pair(p,g1) ##Ergebnis: (b,B) generate_common_secret(p,a,B) ##Ergebnis: K ##2. Instanzierung generate_key_pair(p,g2) ##Ergebnis: (a,A) generate_key_pair(p,g2) ##Ergebnis: (b,B) generate_common_secret(p,a,B) ##Ergebnis: K
*** WARNING: Code contains non-ascii characters *** *** WARNING: Code contains possible implicit multiplication *** *** Check if any of [ 5eBbF, 494Qn, 17a, 1c, 0442ae, 65d, 7daac, 84bf, 00000acd, 3291573a, 4b, 6f, 4772f, 3248000037d, 1(n ] need a "*" sign for multiplication, e.g. 5x should be 5*x ! *** Error in lines 7-7 Traceback (most recent call last): File "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 1013, in execute exec compile(block+'\n', '', 'single') in namespace, locals File "<string>", line 1 c1 = str2num(qk-PRZ@e6Ci@yfYE3mq0w0!5eBbF) ^ SyntaxError: invalid syntax