{"id":43,"date":"2016-06-29T14:26:41","date_gmt":"2016-06-29T12:26:41","guid":{"rendered":"http:\/\/www.robert-kofler.at\/?p=43"},"modified":"2016-08-10T11:47:06","modified_gmt":"2016-08-10T09:47:06","slug":"hash-algorithmus","status":"publish","type":"post","link":"https:\/\/www.robert-kofler.at\/Blog\/2016\/06\/29\/hash-algorithmus\/","title":{"rendered":"Hash &#8211; Algorithmus"},"content":{"rendered":"<p>Ein wesentlicher technologischer Eckpfeiler Bitcoins ist der Hash Algorithmus. Er wird zum einen genutzt um die Integrit\u00e4t der gespeicherten Daten in der Blockchain zu sichern (mittels SHA-256) nund zum anderen werden damit die relativ langen \u00f6ffentlichen Schl\u00fcssel in, f\u00fcr Menschen, leichter lesbare Bitcoin Adressen umgewandelt (mittels RIPEMD-160). Ein paar Grundlagen zu diesem Thema finden sich hier.\u00a0<!--more--><\/p>\n<p>Eine &#8211; rechte simple &#8211; Hash Funktion ist die Quersumme einer Zahl.\u00a0Die Quersumme der Zahl\u00a042589 zum Beispiel ist 28 (4+2+5+8+9=28). \u00c4ndert man nun eine Ziffer der Zahl, \u00e4ndert sich damit auch die Quersumme.\u00a0\u00c4ndert man\u00a0die Zahl an der Einerstelle auf\u00a042582 hat man eine\u00a0Quersumme von 21. Will man nun jemand eine Botschaft \u00fcbermitteln, zum Beispiel eine Zahlungsanweisung oder vielleicht eine Kontonummer kann man neben der Botschaft dem Empf\u00e4nger auch die Quersumme dieser Botschaft senden. Der Empf\u00e4nger kann dann aus der Botschaft die Quersumme bilden und pr\u00fcfen\u00a0ob sie mit der ihm bereits \u00fcbermittelten \u00fcbereinstimmt. Ist dies der Fall, kann der Empf\u00e4nger davon ausgehen, dass die Botschaft nicht besch\u00e4digt bzw. ver\u00e4ndert wurde. Deshalb nennt man so eine\u00a0Quersumme auch gerne mal Pr\u00fcfsumme.<\/p>\n<p>Diese einfache\u00a0Hash Funktion ist allerdings nicht besonders tauglich f\u00fcr den t\u00e4glichen Gebraucht. Wenn man eine Zahlendreher macht (was bei langen Kontonummern zum Beispiel leicht der Fall sein kann), \u00e4ndert das nichts an der Pr\u00fcfsumme. \u00a0Sowohl f\u00fcr\u00a042589 als auch f\u00fcr\u00a045289 w\u00e4re die Quersumme 28. Diese Funktion ist also nicht kollissionssicher.\u00a0Es gibt mehrere m\u00f6gliche Zahlen, welche dieselbe Pr\u00fcfsumme aufweisen k\u00f6nnen. Dies w\u00fcrde es erm\u00f6glichen, trotz sicher und korrekt \u00fcbermittelter Pr\u00fcfsumme, eine Botschaft zu ver\u00e4ndern die\u00a0zur\u00a0Pr\u00fcfsumme passt.<\/p>\n<p>Um dies zu verhindern, verwendet man in der Kryptologie aufwendigere Algorithmen als die, oben verwendete, Quersumme. Bitcoin nutzt f\u00fcr die Integrit\u00e4t der Daten den SHA256 Algorithmus und\u00a0RIPEMD-160 zum Erstellen von leicht lesbaren Bitcoin Adressen. Diese kryptologischen Hash Algorithmen sind kollissionssicher. Kollissionssicherheit bedeutet, dass man davon ausgegangen kann, dass es zu\u00a0einem generierten Hashwert auch nur eine passende Botschaft gibt.<\/p>\n<p>Wie genau dies funktioniert will ich an dieser Stelle nicht erkl\u00e4ren, da es hier relativ tief in die Mathematik geht &#8211; es ist aber auch nicht notwendig. Wichtig ist, zu merken,\u00a0dass es praktisch unm\u00f6glich ist, eine Botschaft so zu ver\u00e4ndern, dass sie &#8211; trotz der \u00c4nderung &#8211; denselben Hashwert liefert wie die urspr\u00fcngliche Nachricht. Damit ist sichergestellt, dass jeder der den urspr\u00fcnglichen Hashwert kennt, selbst die Integrit\u00e4t der Botschaft pr\u00fcfen kann: Er muss nur den Hash aus der Botschaft generieren und pr\u00fcfen ob er mit dem zuvor bekannten Hash \u00fcbereinstimmt. Diese Technik wird auch dazu benutzt, um die Integrit\u00e4t von konventionellen Datenbanken sicher zu stellen. Oder auch um die korrekte \u00dcbertragung von Dateien zu gew\u00e4hrleisten. Beim Download von Dateien finden sich oft Pr\u00fcfsummen (zumeist MD5) neben dem Link zu einer Datei. Nach dem Download ist man damit in der Lage zu pr\u00fcfen ob die erhaltene Datei auch exakt jene ist, die zum Download angeboten wurde, und nicht etwa fehlerhaft geladen &#8211; oder schlimmer &#8211; b\u00f6swillig manipuliert wurde.<\/p>\n<p>Nehmen wir an wir wollen die (sehr kurze) Botschaft &#8222;Warte, nicht h\u00e4ngen!&#8220; \u00fcbertragen. Die Botschaft k\u00f6nnte nat\u00fcrlich viel l\u00e4nger sein, aber sie ist immerhin wichtig. Und zwar so wichtig, dass wir sicher sein wollen, dass\u00a0sie unver\u00e4ndert beim Empf\u00e4nger ankommt. Schlie\u00dflich w\u00e4re schon eine kleine \u00c4nderung am Text katastrophal in ihrer Wirkung. \u00c4ndert man nur die Position des Satzzeichens, bleibt zwar die L\u00e4nge des Textes exakt gleich aber seine Bedeutung kehrt sich um:\u00a0&#8222;Warte nicht, h\u00e4ngen!&#8220;.<\/p>\n<p>Wir stellen also dem Empf\u00e4nger der Botschaft auch noch den Hashwert (SHA256)unserer Botschaft &#8222;Warte, nicht h\u00e4ngen!&#8220; zur Verf\u00fcgung:<\/p>\n<p>4576c93df27f1eb67c01bc0d8b6229e5a332d44a584d018a240058c9a3b53923<\/p>\n<p>Nach Erhalt der Botschaft kann der Empf\u00e4nger ebenfalls den Hashwert aus der Nachricht bilden und diesen mit unserem Hashwert vergleichen. Sind beide identisch kann er sich sicher sein, dass der Inhalt der Nachricht beim Transport nicht ver\u00e4ndert wurde.\u00a0H\u00e4tte nun ein b\u00f6sert Wicht die Nachricht in\u00a0&#8222;Warte nicht, h\u00e4ngen!&#8220; ge\u00e4ndert erhielte der Empf\u00e4nger den Hash:<\/p>\n<p>aae5a88b50e1e981af933f91279777483b3edfcc082f9c46a9fea00bcbd7ef33<\/p>\n<p>und w\u00fcsste damit, dass dem Inhalt der Nachricht nicht zu trauen ist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein wesentlicher technologischer Eckpfeiler Bitcoins ist der Hash Algorithmus. Er wird zum einen genutzt um die Integrit\u00e4t der gespeicherten Daten in der Blockchain zu sichern (mittels SHA-256) nund zum anderen werden damit die relativ langen \u00f6ffentlichen Schl\u00fcssel in, f\u00fcr Menschen, leichter lesbare Bitcoin Adressen umgewandelt (mittels RIPEMD-160). Ein paar Grundlagen zu diesem Thema finden sich &hellip; <a href=\"https:\/\/www.robert-kofler.at\/Blog\/2016\/06\/29\/hash-algorithmus\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eHash &#8211; Algorithmus\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":92,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,3],"tags":[4,5,8,7,6],"class_list":["post-43","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","category-bitcoin-grundlagen","tag-bitcoin","tag-hash","tag-pruefsumme","tag-ripemd-160","tag-sha-256"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":8,"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"predecessor-version":[{"id":93,"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/posts\/43\/revisions\/93"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/media\/92"}],"wp:attachment":[{"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robert-kofler.at\/Blog\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}