![]() |
||
| Kryptologie |
Material
Steganographie
Monoalphabetisch
Polyalphabetisch
One-Time-Pad
Kerckhoffs-Prinzip
Public-Key
RSA
Feistel-Chiffren
IDEA
AES
Langzahlarithmetik
Gpg4win
GnuPG
Keysigning-Party
Einweg-Funktion
Hash
digitale Signatur
Authentifizierung
Zertifikate
Chipkarten
|
|
|
Schlüsseltausch |
Das ganze Problem der Schlüsselverteilung ist eine klassische Paradoxie. Wenn ein Mensch einem anderen eine geheime Nachricht am Telefon übermitteln will, muss er sie verschlüsseln. Dazu baucht er einen Schlüssel, der selbst wiederum ein Geheimnis ist, und so ergibt sich das Problem, diesen geheimen Schlüssel dem Empfänger zu übermitteln, damit die geheime Botschaft gesendet werden kann. Kurz, wenn zwei Menschen sich ein Geheimnis (eine verschlüsselte Botschaft) mitteilen wollen, müssen sie sich zuvor bereits ein Geheimnis (den Schlüssel) mitgeteilt haben.
aus: Simon Singh, Geheime Botschaften, S.311
Wer glaubt, dass das Problem unlösbar ist, soll sich diese Fotostory ansehen.
def count(e,L):
return len([x for x in L if x == e])
def primpotenzen(n):
PF = primfaktoren(n)
MPF = set(PF)
return [(x,count(x,PF)) for x in MPF]
def phi(n):
"""
berechnet iterativ die Eulerfunktion
"""
PP = primpotenzen(n)
produkt = 1
for pp in PP:
produkt = produkt*(pp[0]**(pp[1]-1))*(pp[0]-1)
return produkt
def primitivwurzel(g,n):
"""
gibt genau dann True zurück, wenn g bezüglich n eine Primitivwurzel ist
"""
return len(set([(g**x)%p for x in range(1,n)])) == phi(n)
>>> p=257 >>> primfaktoren(p) [257] >>> g=2 >>> primitivwurzel(g,p) False >>> g=3 >>> primitivwurzel(g,p) True >>> import random >>> a = random.randint(1,p-2) >>> a 235 >>> b = random.randint(1,p-2) >>> b 195 >>> A = (g**a)%p >>> A 218 >>> B = (g**b)%p >>> B 175 >>> (A**b)%p 3 >>> (B**a)%p 3 >>> (g**(a*b))%p 3
Benutze krypto.py, baue und teste ein eigenes Diffie-Hellman-System.
Diffie-Hellman aus mathematischer Sicht von Carola Rauch, Christian Seise und Patrice Schwedler