Okamoto-Uchiyama Kryptosystem jest klucz kryptograficzny publicznej zaproponowany w 1998 roku przez Tatsuaki Okamoto i Shigenori Uchiyama . System działa w multiplikatywnej grupie liczb całkowitych modulo n , gdzie n ma postać p 2 q oraz p i q są dużymi liczbami pierwszymi .
(
Z
/
n
Z
)
∗
{\ Displaystyle (\ mathbb {Z} / n \ mathbb {Z}) ^ {*}}
Operacja
Podobnie jak wiele kryptosystemów z kluczem publicznym , ten schemat działa w grupie . Ten schemat jest homomorficzny, a zatem plastyczny .
(
Z
/
n
Z
)
∗
{\ Displaystyle (\ mathbb {Z} / n \ mathbb {Z}) ^ {*}}
Generacja klucza
Para kluczy publiczny / prywatny jest generowana w następujący sposób:
Wygeneruj dwie duże liczby pierwsze i .
p
{\ displaystyle p}
q
{\ displaystyle q}
Oblicz .
n
=
p
2
q
{\ Displaystyle n = p ^ {2} q}
Wybierz losową liczbę całkowitą takie, że .
sol
∈
{
2
…
n
-
1
}
{\ displaystyle g \ in \ {2 \ kropki n-1 \}}
sol
p
-
1
≢
1
mod
p
2
{\ Displaystyle g ^ {p-1} \ nie \ equiv 1 \ mod p ^ {2}}
Oblicz .
godz
=
sol
n
mod
n
{\ displaystyle h = g ^ {n} {\ bmod {n}}}
Klucz publiczny jest wtedy, a klucz prywatny jest .
(
n
,
sol
,
godz
)
{\ displaystyle (n, g, h)}
(
p
,
q
)
{\ displaystyle (p, q)}
Szyfrowanie
Wiadomość można zaszyfrować za pomocą klucza publicznego w następujący sposób.
m
<
p
{\ displaystyle m <p}
(
n
,
sol
,
godz
)
{\ displaystyle (n, g, h)}
Wybierz losową liczbę całkowitą .
r
∈
{
1
…
n
-
1
}
{\ displaystyle r \ in \ {1 \ kropki n-1 \}}
Oblicz .
do
=
sol
m
godz
r
mod
n
{\ displaystyle c = g ^ {m} h ^ {r} {\ bmod {n}}}
Wartością jest szyfrowanie .
do
{\ displaystyle c}
m
{\ displaystyle m}
Deszyfrowanie
Zaszyfrowaną wiadomość można odszyfrować za pomocą klucza prywatnego w następujący sposób.
do
{\ displaystyle c}
(
p
,
q
)
{\ displaystyle (p, q)}
Oblicz .
za
=
(
do
p
-
1
mod
p
2
)
-
1
p
{\ Displaystyle a = {\ Frac {(c ^ {p-1} {\ bmod {p ^ {2}}}) - 1} {p}}}
Oblicz . i będą liczbami całkowitymi.
b
=
(
sol
p
-
1
mod
p
2
)
-
1
p
{\ Displaystyle b = {\ Frac {(g ^ {p-1} {\ bmod {p ^ {2}}}) - 1} {p}}}
za
{\ displaystyle a}
b
{\ displaystyle b}
Korzystając z rozszerzonego algorytmu euklidesowego , obliczyć odwrotność modulo :
b
{\ displaystyle b}
p
{\ displaystyle p}
b
′
=
b
-
1
mod
p
{\ Displaystyle b '= b ^ {- 1} {\ bmod {p}}}
.
Oblicz .
m
=
za
b
′
mod
p
{\ displaystyle m = ab '{\ bmod {p}}}
Wartość to odszyfrowanie .
m
{\ displaystyle m}
do
{\ displaystyle c}
Przykład
Niech i . Wtedy . Wybierz . Wtedy .
p
=
3
{\ displaystyle p = 3}
q
=
5
{\ displaystyle q = 5}
n
=
3
2
⋅
5
=
45
{\ Displaystyle n = 3 ^ {2} \ cdot 5 = 45}
sol
=
22
{\ displaystyle g = 22}
godz
=
22
45
mod
4
5
=
37
{\ Displaystyle h = 22 ^ {45} {\ bmod {4}} 5 = 37}
Teraz, aby zaszyfrować wiadomość , wybieramy losowo i obliczamy .
m
=
2
{\ Displaystyle m = 2}
r
=
13
{\ displaystyle r = 13}
do
=
sol
m
godz
r
mod
n
=
22
2
37
13
mod
4
5
=
43
{\ Displaystyle c = g ^ {m} h ^ {r} {\ bmod {n}} = 22 ^ {2} 37 ^ {13} {\ bmod {4}} 5 = 43}
Aby odszyfrować wiadomość 43, obliczamy
za
=
(
43
2
mod
3
2
)
-
1
3
=
1
{\ Displaystyle a = {\ Frac {(43 ^ {2} {\ bmod {3}} ^ {2}) - 1} {3}} = 1}
.
b
=
(
22
2
mod
3
2
)
-
1
3
=
2
{\ Displaystyle b = {\ Frac {(22 ^ {2} {\ bmod {3}} ^ {2}) - 1} {3}} = 2}
.
b
′
=
2
-
1
mod
3
=
2
{\ Displaystyle b '= 2 ^ {- 1} {\ bmod {3}} = 2}
.
I wreszcie .
m
=
za
b
′
=
2
{\ displaystyle m = ab '= 2}
Dowód poprawności
Chcemy udowodnić, że wartość obliczona w ostatnim kroku deszyfrowania jest równa oryginalnej wiadomości . Mamy
za
b
′
mod
p
{\ displaystyle ab '{\ bmod {p}}}
m
{\ displaystyle m}
(
sol
m
godz
r
)
p
-
1
≡
(
sol
m
sol
n
r
)
p
-
1
≡
(
sol
p
-
1
)
m
sol
p
(
p
-
1
)
r
p
q
≡
(
sol
p
-
1
)
m
mod
p
2
{\ Displaystyle (g ^ {m} h ^ {r}) ^ {p-1} \ equiv (g ^ {m} g ^ {nr}) ^ {p-1} \ equiv (g ^ {p-1 }) ^ {m} g ^ {p (p-1) rpq} \ equiv (g ^ {p-1}) ^ {m} \ mod p ^ {2}}
Aby odzyskać , musimy wziąć logarytm dyskretny o podstawie .
m
{\ displaystyle m}
sol
p
-
1
{\ displaystyle g ^ {p-1}}
Grupa
(
Z
/
n
Z
)
∗
≃
(
Z
/
p
2
Z
)
∗
×
(
Z
/
q
Z
)
∗
{\ Displaystyle (\ mathbb {Z} / n \ mathbb {Z}) ^ {*} \ simeq (\ mathbb {Z} / p ^ {2} \ mathbb {Z}) ^ {*} \ times (\ mathbb {Z} / q \ mathbb {Z}) ^ {*}}
.
Definiujemy H, które jest podgrupą i jego liczność to p-1
Z
/
p
2
Z
∗
{\ Displaystyle \ mathbb {Z} / p ^ {2} \ mathbb {Z} ^ {*}}
H.
=
{
x
:
x
p
-
1
mod
p
2
=
1
+
r
p
,
0
<
r
<
p
}
{\ Displaystyle H = \ {x: x ^ {p-1} \ mod p ^ {2} = 1 + rp, 0 <r <p \}}
.
Dla dowolnego elementu x w mamy x p −1 mod p 2 jest w H , ponieważ p dzieli x p −1 - 1.
(
Z
/
p
2
Z
)
∗
{\ Displaystyle (\ mathbb {Z} / p ^ {2} \ mathbb {Z}) ^ {*}}
Mapę należy traktować jako logarytm z cyklicznej grupy H do grupy addytywnej i łatwo jest sprawdzić, czy L ( ab ) = L ( a ) + L ( b ) i że L jest izomorfizmem między nimi dwie grupy. Podobnie jak w przypadku zwykłego logarytmu, L ( x ) / L ( g ) jest w pewnym sensie logarytmem x o podstawie g .
L
(
x
)
=
x
-
1
p
{\ Displaystyle L (x) = {\ Frac {x-1} {p}}}
Z
/
p
Z
{\ displaystyle \ mathbb {Z} / p \ mathbb {Z}}
co jest realizowane przez
L
(
(
sol
p
-
1
)
m
)
L
(
sol
p
-
1
)
=
m
mod
p
.
{\ Displaystyle {\ Frac {L \ lewo ((g ^ {p-1}) ^ {m} \ prawej)} {L (g ^ {p-1})}}} = m \ mod p.}
Bezpieczeństwo
Bezpieczeństwo na całej wiadomości można wykazać równoważne faktoringowej n . W semantyczne bezpieczeństwa spoczywa na str -subgroup założeniu, która zakłada, że trudno jest określić, czy element x w w podgrupie rzędu p . Jest to bardzo podobne do problemu z pozostałościami kwadratowymi i problemu wyższych pozostałości .
(
Z
/
n
Z
)
∗
{\ Displaystyle (\ mathbb {Z} / n \ mathbb {Z}) ^ {*}}
Bibliografia
<img src="https://en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">