{"id":22818,"date":"2025-09-20T02:04:00","date_gmt":"2025-09-20T00:04:00","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=22818"},"modified":"2025-09-19T20:20:34","modified_gmt":"2025-09-19T18:20:34","slug":"diffie-hellman-schluesselaustausch-das-erste-der-sogenannten-asymmetrischen-kryptoverfahren-auch-public-key-kryptoverfahren","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=22818","title":{"rendered":"Diffie-Hellman-Schl\u00fcsselaustausch &#8211; das erste der sogenannten asymmetrischen Kryptoverfahren (auch Public-Key-Kryptoverfahren)"},"content":{"rendered":"<p>Der <a href=\"https:\/\/de.wikipedia.org\/wiki\/Diffie-Hellman-Schl%C3%BCsselaustausch\" target=\"_blank\">Diffie-Hellman-Schl\u00fcsselaustausch<\/a> ist ein Weg, wie zwei Menschen einen geheimen Schl\u00fcssel finden k\u00f6nnen, ohne ihn direkt hin- und herzuschicken. <\/p>\n<p>Zuerst einigen sie sich \u00f6ffentlich auf eine gro\u00dfe Zahl (eine Primzahl) und eine Basiszahl. <\/p>\n<p>Jeder w\u00e4hlt dann eine geheime Zahl f\u00fcr sich selbst. Mit der geheimen Zahl rechnen sie eine neue Zahl aus, die sie dem anderen schicken. <\/p>\n<p>Danach kann jeder mit der Zahl vom anderen und seiner eigenen geheimen Zahl denselben geheimen Schl\u00fcssel berechnen. Und zwar so:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/09\/diffie-hellman-schluesseltausch.jpeg\" alt=\"\" width=\"774\" height=\"1596\" class=\"aligncenter size-full wp-image-22819\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/09\/diffie-hellman-schluesseltausch.jpeg 774w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/09\/diffie-hellman-schluesseltausch-145x300.jpeg 145w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/09\/diffie-hellman-schluesseltausch-497x1024.jpeg 497w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/09\/diffie-hellman-schluesseltausch-768x1584.jpeg 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/09\/diffie-hellman-schluesseltausch-745x1536.jpeg 745w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Einfach gesagt und ein Beispiel in Java: <!--more--><\/p>\n<p>&#8211; Alice und Bob einigen sich auf eine gro\u00dfe Primzahl  und eine Basis . Beide Zahlen sind f\u00fcr jeden sichtbar<\/p>\n<p>&#8211; Alice nimmt ihre geheime Zahl  und rechnet  A = g^a \\mod p  aus. Die Zahl schickt sie an Bob<\/p>\n<p>&#8211; Bob macht das Gleiche mit seiner geheimen Zahl  und berechnet  B = g^b \\mod p . Die Zahl schickt er an Alice<\/p>\n<p>&#8211; Alice benutzt  und ihre geheime Zahl , um den gemeinsamen Schl\u00fcssel zu berechnen:  K = B^a \\mod p<\/p>\n<p>&#8211; Bob benutzt  und seine geheime Zahl , um den Schl\u00fcssel zu berechnen:  K = A^b \\mod p<\/p>\n<p>Am Ende haben beide den gleichen geheimen Schl\u00fcssel, obwohl jeder seine geheime Zahl f\u00fcr sich behalten hat. <\/p>\n<p>Ein fremder Lauscher kann diesen Schl\u00fcssel praktisch nicht herausfinden. Deshalb kann der Schl\u00fcssel sicher zum Verschl\u00fcsseln verwendet werden.<\/p>\n<p>Man nennt das Verfahren auch <strong>Schl\u00fcsselvereinbarung<\/strong>, weil beide auf sichere Weise denselben Schl\u00fcssel finden, ohne ihn direkt zu tauschen (siehe auch <a href=\"https:\/\/de.wikipedia.org\/wiki\/Diffie-Hellman-Schl%C3%BCsselaustausch\" target=\"_blank\">Wikipedia<\/a>)<\/p>\n<p>Hier nun noch ein einfaches Beispiel in Java:<\/p>\n<pre class=\"lang:java decode:true \" >package de.wenzlaff.crypto;\r\n\r\nimport java.math.BigInteger;\r\nimport java.security.SecureRandom;\r\n\r\n\/**\r\n * Hier ist ein einfaches Java-Programm zur Demo, das den\r\n * Diffie-Hellman-Schl\u00fcsselaustausch demonstriert.\r\n * \r\n * Es verwendet die Java-eigene Klasse \u00a0BigInteger\u00a0 f\u00fcr gro\u00dfe Zahlen und zeigt,\r\n * wie Alice und Bob ihre geheimen Schl\u00fcssel berechnen und austauschen, um zum\r\n * gleichen gemeinsamen Schl\u00fcssel zu kommen.\r\n * \r\n * Dieses Programm zeigt die einzelnen Schritte des Diffie-Hellman-Verfahrens\r\n * mit exemplarisch kleinen Zahlen f\u00fcr bessere Verst\u00e4ndlichkeit. In der Praxis\r\n * sollten die Werte von und deutlich gr\u00f6\u00dfer sein (&gt; 3000 Bit) f\u00fcr Sicherheit.\r\n * Der geheime Schl\u00fcssel ist das Ergebnis, das sowohl Alice als auch Bob\r\n * berechnen und das gleich ist. Der Wert wird hier nur ausgegeben, aber k\u00f6nnte\r\n * z.B. als symmetrischer Schl\u00fcssel f\u00fcr Verschl\u00fcsselung genutzt werden.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\r\n *\/\r\npublic class DiffieHellmanKeyTausch {\r\n\r\n\tpublic static void main(String[] args) {\r\n\r\n\t\t\/\/ \u00d6ffentliche Parameter: gro\u00dfe Primzahl p und Generator g\r\n\r\n\t\t\/\/ p ist eine gro\u00dfe Primzahl, die als Modul f\u00fcr alle Berechnungen dient. Sie\r\n\t\t\/\/ definiert die \u201cRinggr\u00f6\u00dfe\u201d f\u00fcr die modularen Potenz-Rechnungen. Die Wahl von\r\n\t\t\/\/ ist entscheidend f\u00fcr die Sicherheit, denn sie muss so gro\u00df sein, dass der\r\n\t\t\/\/ diskrete Logarithmus (also das Auffinden geheimer Exponenten) praktisch nicht\r\n\t\t\/\/ l\u00f6sbar ist. Typischerweise wird eine mit mehreren hundert oder tausend Bit\r\n\t\t\/\/ L\u00e4nge gew\u00e4hlt.\r\n\t\tBigInteger p = new BigInteger(\"23\"); \/\/ kleine Primzahl als Beispiel, in der Praxis viel gr\u00f6\u00dfer\r\n\r\n\t\t\/\/ g ist eine sogenannte Primitivwurzel modulo, auch Generator genannt. Das\r\n\t\t\/\/ bedeutet, dass die Potenzen von modulo alle Zahlen von 1 bis p -1\r\n\t\t\/\/ erzeugen k\u00f6nnen.\r\n\t\t\/\/ Es ist also ein Basiswert, mit dem die geheimen Zahlen potenziert werden, um\r\n\t\t\/\/ \u00f6ffentliche Schl\u00fcssel zu generieren.\r\n\t\tBigInteger g = new BigInteger(\"5\"); \/\/ Generator (Basiswert f\u00fcr Potenzierung modulo )\r\n\r\n\t\tSecureRandom random = new SecureRandom();\r\n\r\n\t\t\/\/ Alice w\u00e4hlt ihre geheime Zahl a\r\n\t\tBigInteger a = new BigInteger(5, random); \/\/ zuf\u00e4llige Zahl kleiner 2^5 (als Beispiel)\r\n\t\t\/\/ Bob w\u00e4hlt seine geheime Zahl b\r\n\t\tBigInteger b = new BigInteger(5, random);\r\n\r\n\t\tSystem.out.println(\"\u00d6ffentliche Parameter:\");\r\n\t\tSystem.out.println(\"p = \" + p);\r\n\t\tSystem.out.println(\"g = \" + g);\r\n\r\n\t\tSystem.out.println(\"\\nAlice w\u00e4hlt geheime Zahl a = \" + a);\r\n\t\tSystem.out.println(\"  Bob w\u00e4hlt geheime Zahl b = \" + b);\r\n\r\n\t\t\/\/ Alice berechnet A = g^a mod p\r\n\t\tBigInteger A = g.modPow(a, p); \/\/ berechnet den modularen Exponent\r\n\t\t\/\/ Bob berechnet B = g^b mod p\r\n\t\tBigInteger B = g.modPow(b, p);\r\n\r\n\t\tSystem.out.println(\"\\nAlice berechnet und sendet A = g^a mod p = \" + g + \"^\" + a + \" mod \" + p + \" = \" + A);\r\n\t\tSystem.out.println(\"  Bob berechnet und sendet B = g^b mod p = \" + g + \"^\" + b + \" mod \" + p + \" = \" + B);\r\n\r\n\t\t\/\/ Alice berechnet geheimen Schl\u00fcssel K = B^a mod p\r\n\t\tBigInteger keyAlice = B.modPow(a, p);\r\n\t\t\/\/ Bob berechnet geheimen Schl\u00fcssel K = A^b mod p\r\n\t\tBigInteger keyBob = A.modPow(b, p);\r\n\r\n\t\tSystem.out.println(\"\\nAlice berechnet gemeinsamen Schl\u00fcssel: \" + keyAlice);\r\n\t\tSystem.out.println(\"  Bob berechnet gemeinsamen Schl\u00fcssel: \" + keyBob);\r\n\r\n\t\t\/\/ Pr\u00fcfen, dass beide Schl\u00fcssel gleich sind\r\n\t\tSystem.out.println(\"\\nSchl\u00fcssel stimmen \u00fcberein: \" + keyAlice.equals(keyBob));\r\n\t}\r\n}\r\n<\/pre>\n<p>Beispiel Ausgabe:<\/p>\n<pre class=\"lang:default decode:true \" >\u00d6ffentliche Parameter:\r\np = 23\r\ng = 5\r\n\r\nAlice w\u00e4hlt geheime Zahl a = 2\r\n  Bob w\u00e4hlt geheime Zahl b = 13\r\n\r\nAlice berechnet und sendet A = g^a mod p = 5^2 mod 23 = 2\r\n  Bob berechnet und sendet B = g^b mod p = 5^13 mod 23 = 21\r\n\r\nAlice berechnet gemeinsamen Schl\u00fcssel: 4\r\n  Bob berechnet gemeinsamen Schl\u00fcssel: 4\r\n\r\nSchl\u00fcssel stimmen \u00fcberein: true<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Der Diffie-Hellman-Schl\u00fcsselaustausch ist ein Weg, wie zwei Menschen einen geheimen Schl\u00fcssel finden k\u00f6nnen, ohne ihn direkt hin- und herzuschicken. Zuerst einigen sie sich \u00f6ffentlich auf eine gro\u00dfe Zahl (eine Primzahl) und eine Basiszahl. Jeder w\u00e4hlt dann eine geheime Zahl f\u00fcr sich selbst. Mit der geheimen Zahl rechnen sie eine neue Zahl aus, die sie dem &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=22818\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eDiffie-Hellman-Schl\u00fcsselaustausch &#8211; das erste der sogenannten asymmetrischen Kryptoverfahren (auch Public-Key-Kryptoverfahren)\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,4606,5],"tags":[6219,112,6218,2178,819,6220],"class_list":["post-22818","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-crypto","category-java","tag-asymmetrischen-kryptoverfahren","tag-beispiel","tag-diffie-hellman-schluesselaustausch","tag-java","tag-key","tag-public-key-kryptoverfahren"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=22818"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22818\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=22818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=22818"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=22818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}