Das Paillier Cryptosystem mit Beispielen in Cran-R - TU Dortmund

15.12.2015 - Wähle zwei Primzahlen p und q. n = p·q, g mit |g| ist n in Z∗ n2 . ... 43. 13. 208. 178. 148. 8. 107 137 167 197. 2. 32. 62. 92 122. 152. 182. 212.
54KB Größe 22 Downloads 350 Ansichten
Das Paillier Cryptosystem mit Beispielen in Cran-R Thomas Liebig [email protected] 15. Dezember 2015 Das Kryptosystem besteht aus drei Komponenten: (1) Schlüsselgenerierung, (2) Verschlüsselung, und (3) Entschlüsselung.

1 Schlüsselgenerierung Wähle zwei Primzahlen p und q. n = p · q, g mit |g| ist n in Z∗n2 . Der öffentliche Schlüssel ist dann das Tupel (n, g). Carmichael’s function λ(n) ist das kleinste m zu einer Zahl n, so dass ∀a, ggT (a, n) = 1 gilt: am ≡ 1 mod n. Wenn p und q Primfaktoren von n sind, ist λ(n) = kgV (ϕ(p), ϕ(q)). Für den Fall, dass p und q Primzahlen sind gilt damit: λ(n) = kgV (p − 1, q − 1). λ ist der private Schlüssel.

2 Eigenschaften ∀w ∈ Z∗n2 : wλ ≡ 1 mod n und wnλ ≡ 1 mod n2 . Die Menge Sn = {u < n2 |u = 1 mod n} ist eine multiplikative Teilmenge modulo n2 auf der die Funktion L(u) = (u − 1)/n für alle u ∈ Sn wohldefiniert ist.

3 Verschlüsselung Eg : Zn × Z∗n Eg (x, y)

→ Z∗n2 → g x · y n mod n2

Eg (m, r)

→ g m · rn mod n2

4 Entschlüsselung m = L(cλ mod n2 ) ∗ L−1 (g λ mod n2 ) mit L(x) = (x − 1)/n 1

5 Beispiel require("pracma") require("numbers")

# provides gcd() # provides isPrime(), modpower()

p=3 q=5

Schlüsselgenerierung n=p*q phi=(p-1)*(q-1) g=n+1 lambda=Lcm((p-1),(q-1)) # = (p-1)*(q-1)/gcd((p-1),(q-1)) n = 15, ϕ(n) = 8, λ(n) = 4, g = 16

Berechnung von A = Z∗n2 A=matrix(ncol=n,nrow=phi) j=0 for (i in 1:phi) { j=j+1 while (gcd(j,n)!=1) {j=j+1} for (m in 0:(n-1)) { A[i,(m+1)]=(modpower(g,m,(n^2)) * modpower(j,n,(n^2))) %% n^2 } }

Betrachtung von A >print(A) r\m 1 2 4 7 8 11 13 14

0 1 143 199 118 107 26 82 224

1 16 38 34 88 137 191 187 209

2 31 158 94 58 167 131 67 194

3 46 53 154 28 197 71 172 179

4 61 173 214 223 2 11 52 164

5 76 68 49 193 32 176 157 149

2

6 91 188 109 163 62 116 37 134

7 106 83 169 133 92 56 142 119

8 121 203 4 103 122 221 22 104

9 136 98 64 73 152 161 127 89

10 151 218 124 43 182 101 7 74

11 166 113 184 13 212 41 112 59

12 181 8 19 208 17 206 217 44

13 196 128 79 178 47 146 97 29

14 211 23 139 148 77 86 202 14

Betrachtung von Aλ >modpower(A,lambda,n^2)

[1,] [2,] [3,] [4,] [5,] [6,] [7,] [8,]

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166 1 61 121 181 16 76 136 196 31 91 151 211 46 106 166

Betrachtung von L(Aλ ) mod n2 >((modpower(A,lambda,n^2)-1)/n)

[1,] [2,] [3,] [4,] [5,] [6,] [7,] [8,]

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11

Betrachtung von L(Aλ )/L(g λ ) mod n L(g λ mod n2 ) = L(61) = 60/15 = 4 L−1 (g λ mod n2 ) = 4 > Lg = (modpower(g,lambda,n^2)-1)/n > Lg_inv = (extGCD(Lg,n)[2]+n) %% n >(((modpower(A,lambda,n^2)-1)/n) * Lg_inv) %% n

[1,] [2,] [3,] [4,] [5,] [6,] [7,] [8,]

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

3

Homeomorphie 92 = (191 ∗ 37) mod 152

Entschlüsselung (((((774 ) mod (152 )) − 1)/15) ∗ 4) mod 15 = 14 (((((7^4) %% (15^2))-1)/15) * 4) %% 15 = 10 (((((164^4) %% (15^2))-1)/15) * 4) %% 15 = 4 (((((82^4) %% (15^2))-1)/15) * 4) %% 15 = 0 (((((98^4) %% (15^2))-1)/15) * 4) %% 15 = 9

6 Quelltext require("pracma") require("numbers")

# provides gcd() # provides isPrime(), modpower()

p=3 q=5 n=p*q phi=(p-1)*(q-1) g=n+1 lambda=Lcm((p-1),(q-1)) # = (p-1)*(q-1)/gcd((p-1),(q-1)) encrypt