Benutzer-Werkzeuge

Webseiten-Werkzeuge


lavenzug:paßwort-hashing-mit-postgres

Dies ist eine alte Version des Dokuments!


Paßwort-Hashing mit Postgres

Um Paßwörter in der Datenbank abzuspeichern, ist Blowfish dringend anzuraten. In Postgres geht das beispielsweise durch die pgcrypto-Extension. Der Nachteil ist allerdings, daß Blowfish nur höchstens 72 Zeichen verschlüsseln kann. Ist das Paßwort länger, wird es kurzerhand abgeschnitten, bevor es verschlüsselt ist. Das ist… weniger gut.

Das sei an einem Beispiel erläutert: Das Paßwort sei das mastodontische Unding von Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumständer. das sind 91 Buchstaben. Blowfish arbeitet byte-weise; da das Paßwort Nicht-ASCII-Zeichen enthält, wird es in UTF-8 mit 94 Bytes kodiert. Von diesen 94 Bytes werden maximal 72 verschlüsselt1).

In der Praxis bedeutet das, daß ich beispielsweise das ‚Christbaumständer‘ von dem Paßwort da oben hinschreiben kann oder auch weglassen, es macht keinen Unterschied, beide Varianten würden akzeptiert werden. Das hintertreibt natürlich den ganzen Sinn hinter längeren passphrases, deshalb braucht es in solchen Fällen dann irgendwelche Alternativen. Eine mögliche Variante ist, längere Paßwörter dann z.B. mit SSHA512 zu hashen. Damit hat der Benutzer immer noch seine hübsche lange passphrase, allerdings ist SSHA512 viel schneller zu berechnen, was ja der eigentliche Grund dafür war, wieso Blowfish eigentlich die bessere Wahl ist.2)

Daß das Paßwort in der Tat abgeschnitten wird, läßt sich recht leicht illustrieren:

SELECT
    generate_series,
    CRYPT(SUBSTRING('Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumständer' FROM 1 FOR generate_series),
          '$2a$08$LwoiF92VlPVXMEml3Zusn.'),
    SUBSTRING('Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumständer' FROM 1 FOR generate_series)
FROM
    GENERATE_SERIES(1,
                    LENGTH('Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumständer'))
 generate_series |                            crypt                             |                                          substring                                          
-----------------+--------------------------------------------------------------+---------------------------------------------------------------------------------------------
               1 | $2a$08$LwoiF92VlPVXMEml3Zusn.YGul.aYSIUdw6Um20YBVED4ZzFidt2S | P
               2 | $2a$08$LwoiF92VlPVXMEml3Zusn.rCsDGg/md4B5tN1ZCcAcp1b.WqA3M1S | Pa
               3 | $2a$08$LwoiF92VlPVXMEml3Zusn.pCyiWquS5UsR1gFz0IHEdjzx8zkyz4q | Paß
               4 | $2a$08$LwoiF92VlPVXMEml3Zusn.greLXvXEZHpt5ngPmgmjKAfgB3wSMju | Paßw
               5 | $2a$08$LwoiF92VlPVXMEml3Zusn.AXXVjn30bUD4/AY.A5TPBp/pLZGV2pq | Paßwo
               6 | $2a$08$LwoiF92VlPVXMEml3Zusn.F9zzLdS/7xf1Ub4Q36RLvavOKoxwYFy | Paßwor
               7 | $2a$08$LwoiF92VlPVXMEml3Zusn.rNao0M663o7TB6FL0WIR24H5fuAHtl. | Paßwort
               8 | $2a$08$LwoiF92VlPVXMEml3Zusn.t2wz6ywgfcYAjWMeqaLGzIbbOknP2Gu | Paßwort 
               9 | $2a$08$LwoiF92VlPVXMEml3Zusn.WDZuN4LiZcRUUJZYotbEux3e5i0oKTa | Paßwort S
              10 | $2a$08$LwoiF92VlPVXMEml3Zusn.trN.NupEr4h/QlcWf50dVay/pLz3ti. | Paßwort Sc
              11 | $2a$08$LwoiF92VlPVXMEml3Zusn.bPp/R7Qur.OIbWb7qL5MRh9cBhrfqni | Paßwort Sch
              12 | $2a$08$LwoiF92VlPVXMEml3Zusn.h4VwrJkMXXjT2BHPHF.IbuSw8VsjajC | Paßwort Schl
              13 | $2a$08$LwoiF92VlPVXMEml3Zusn.EEVM.5UAzWw0369yyNlsTiSVq1OaZ9W | Paßwort Schlü
              14 | $2a$08$LwoiF92VlPVXMEml3Zusn..SlJk1lbSuHgNJ64pdVJ36.pnHTKOrq | Paßwort Schlüs
              15 | $2a$08$LwoiF92VlPVXMEml3Zusn.F/ATM6.AtxugCW3OF/ySzZvPimkg/wq | Paßwort Schlüss
              16 | $2a$08$LwoiF92VlPVXMEml3Zusn.KpTzTFbDdZN6RNJOyhpJ384q7V0y66. | Paßwort Schlüsse
              17 | $2a$08$LwoiF92VlPVXMEml3Zusn.b2fmScxVkpXqFmyVXWcgKubd5euzMs. | Paßwort Schlüssel
              18 | $2a$08$LwoiF92VlPVXMEml3Zusn.GG8q/D7pLglsaqI62SXOp9JaWmcDLqO | Paßwort Schlüsself
              19 | $2a$08$LwoiF92VlPVXMEml3Zusn.1GU1oHZFJ4Tn2Q43lY0UFkiBjf3ncv2 | Paßwort Schlüsselfu
              20 | $2a$08$LwoiF92VlPVXMEml3Zusn.HRCdVdx//PQOHWGk.7cChx5qCNnZs8. | Paßwort Schlüsselfun
              21 | $2a$08$LwoiF92VlPVXMEml3Zusn.t9xadJfUgbdRYHQfaoxMXa56WOFgXZa | Paßwort Schlüsselfunk
              22 | $2a$08$LwoiF92VlPVXMEml3Zusn.RDEnclPzpJaPQ9Nkb0XArwdSiARvpKK | Paßwort Schlüsselfunkt
              23 | $2a$08$LwoiF92VlPVXMEml3Zusn.rAc7FiVJ7AS7WbqBzg0KnSeqxnl1CMG | Paßwort Schlüsselfunkti
              24 | $2a$08$LwoiF92VlPVXMEml3Zusn.Kg9iqzzH93B9.ZV1DrCpedfADASdPRS | Paßwort Schlüsselfunktio
              25 | $2a$08$LwoiF92VlPVXMEml3Zusn.pCTdTnkvVtmwEA3ytC7NswZ59qGZqqO | Paßwort Schlüsselfunktion
              26 | $2a$08$LwoiF92VlPVXMEml3Zusn.9SD0MRrBCPVDbnw421va8qbzMkoGj4y | Paßwort Schlüsselfunktion 
              27 | $2a$08$LwoiF92VlPVXMEml3Zusn.VzM60YcKt14Z97r1WGww4CWQVHF8lES | Paßwort Schlüsselfunktion T
              28 | $2a$08$LwoiF92VlPVXMEml3Zusn.Bda5m3J7X7SZycvW5ZWsPXscIWh5QaW | Paßwort Schlüsselfunktion Ti
              29 | $2a$08$LwoiF92VlPVXMEml3Zusn.tB.UjmG5woQpKDiYZyLKauW7j40MaOC | Paßwort Schlüsselfunktion Tis
              30 | $2a$08$LwoiF92VlPVXMEml3Zusn.OHALxpYmopfJYjzXuwO.MLmOTzdMbZ2 | Paßwort Schlüsselfunktion Tisc
              31 | $2a$08$LwoiF92VlPVXMEml3Zusn.j2Mq.kpGnclGdGTUrmsNDmVv6hMnLQa | Paßwort Schlüsselfunktion Tisch
              32 | $2a$08$LwoiF92VlPVXMEml3Zusn.iXb62vozK4a/ec7oO5AEwi7u7EWYK3G | Paßwort Schlüsselfunktion Tischd
              33 | $2a$08$LwoiF92VlPVXMEml3Zusn.VLopgBcysvndhCaymbsSr4Tj1XSUNvG | Paßwort Schlüsselfunktion Tischde
              34 | $2a$08$LwoiF92VlPVXMEml3Zusn.w.6VgPT9IqJ4BsCgiscQnnrO/3cK3vC | Paßwort Schlüsselfunktion Tischdec
              35 | $2a$08$LwoiF92VlPVXMEml3Zusn.gUV/WiT53A.As.nxlyTOJd.S0se9fj2 | Paßwort Schlüsselfunktion Tischdeck
              36 | $2a$08$LwoiF92VlPVXMEml3Zusn.nK2xLmSWdZxaHMPotn4CPheStALbKhK | Paßwort Schlüsselfunktion Tischdecke
              37 | $2a$08$LwoiF92VlPVXMEml3Zusn.SbBNyKbEP8XWYKcVq5nO03oI.IPV.JO | Paßwort Schlüsselfunktion Tischdecken
              38 | $2a$08$LwoiF92VlPVXMEml3Zusn.WtbAyBhz6Z4jVlIavULMkruV4DDa/tC | Paßwort Schlüsselfunktion Tischdeckenl
              39 | $2a$08$LwoiF92VlPVXMEml3Zusn.lfa/b3cCBcfyTY48lx8ULA8VyC/fh/a | Paßwort Schlüsselfunktion Tischdeckenli
              40 | $2a$08$LwoiF92VlPVXMEml3Zusn.VXOUmLXttqMmWGsSFFmpztt7/ndV0SG | Paßwort Schlüsselfunktion Tischdeckenlie
              41 | $2a$08$LwoiF92VlPVXMEml3Zusn.X3UPtQKxG6bpv6F01n1X2yNm9OuFnjy | Paßwort Schlüsselfunktion Tischdeckenlief
              42 | $2a$08$LwoiF92VlPVXMEml3Zusn.n/VklYWiI.Uo/RqLuJaaqai6amflcbG | Paßwort Schlüsselfunktion Tischdeckenliefe
              43 | $2a$08$LwoiF92VlPVXMEml3Zusn.ScqJCjfvGPNnQbrpazqkR.veeHzRZSC | Paßwort Schlüsselfunktion Tischdeckenliefer
              44 | $2a$08$LwoiF92VlPVXMEml3Zusn.4jPB9msTr3eHbmvyLyx9gzwgAyCIXzK | Paßwort Schlüsselfunktion Tischdeckenlieferu
              45 | $2a$08$LwoiF92VlPVXMEml3Zusn.qb5IkclmB58iq7QpMyxXKZ92Jf3u.VO | Paßwort Schlüsselfunktion Tischdeckenlieferun
              46 | $2a$08$LwoiF92VlPVXMEml3Zusn.o1dEqjwi47/2e9ozgen.2S49GCmrp0O | Paßwort Schlüsselfunktion Tischdeckenlieferung
              47 | $2a$08$LwoiF92VlPVXMEml3Zusn.FrhV4z.EqK8GFBNJIXGuQvDi4IXcQ1q | Paßwort Schlüsselfunktion Tischdeckenlieferung 
              48 | $2a$08$LwoiF92VlPVXMEml3Zusn.xyd9bL2DpXbtbGe7Bl/fHv273sl8NK6 | Paßwort Schlüsselfunktion Tischdeckenlieferung W
              49 | $2a$08$LwoiF92VlPVXMEml3Zusn.TOTtWoF7LtxaY93.RCLzJ8FW2bZ4yfi | Paßwort Schlüsselfunktion Tischdeckenlieferung We
              50 | $2a$08$LwoiF92VlPVXMEml3Zusn.mV4.Rm69sBsO3zC2wtCosOCNz/BauE2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Wei
              51 | $2a$08$LwoiF92VlPVXMEml3Zusn.l9Cxnoom2/XYD8R4xEvIAruV9BRiysW | Paßwort Schlüsselfunktion Tischdeckenlieferung Weih
              52 | $2a$08$LwoiF92VlPVXMEml3Zusn.ogrvNBLDWSCh0rf.ha.k7yFBo44Yo8. | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihn
              53 | $2a$08$LwoiF92VlPVXMEml3Zusn.sxAFCdZpbidmAYrC3EHjXEJUx0co55e | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihna
              54 | $2a$08$LwoiF92VlPVXMEml3Zusn.GVoK9HUwPd4dsjtPPhDLt9lEOs5xo9y | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnac
              55 | $2a$08$LwoiF92VlPVXMEml3Zusn.SLwiD0UZiZqtCzdSX7IyUJUVa1O0K4a | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnach
              56 | $2a$08$LwoiF92VlPVXMEml3Zusn.oJvi8XgJxv.2CjKoKMaT1k2DBYxEjIS | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnacht
              57 | $2a$08$LwoiF92VlPVXMEml3Zusn.JIvN4WW0pnkCH/NRIPV7Xe0.jynaVMW | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachts
              58 | $2a$08$LwoiF92VlPVXMEml3Zusn.Xtlzd3sf/BubVF0LY.BFwOajJDpDXzu | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtsk
              59 | $2a$08$LwoiF92VlPVXMEml3Zusn.TswVwo0X9mLLLjc8RrVfru.EKgdw35W | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtske
              60 | $2a$08$LwoiF92VlPVXMEml3Zusn.Bhh.ACaPxdBE./VoC1rXGVXet057SVq | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskek
              61 | $2a$08$LwoiF92VlPVXMEml3Zusn.1hkBI8KSmA1XSecLtfI/H6ZPg.O/OgC | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskeks
              62 | $2a$08$LwoiF92VlPVXMEml3Zusn.3QYnOudURmgU00FqAu4y8wvC.5saqUG | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse
              63 | $2a$08$LwoiF92VlPVXMEml3Zusn.gfxjxK65ZlVb7kNPVe2Juk.87MBUrs. | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse 
              64 | $2a$08$LwoiF92VlPVXMEml3Zusn.ajMONWT4bwWeXsGySlb2JkK310Vsqn6 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse T
              65 | $2a$08$LwoiF92VlPVXMEml3Zusn.NmPU5XzANgFSpTQ3PG8akV.1kRRpXrW | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Ta
              66 | $2a$08$LwoiF92VlPVXMEml3Zusn.D0UFxf4EacYZkV9QuxtTkqzt2f1unb6 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tan
              67 | $2a$08$LwoiF92VlPVXMEml3Zusn.IUQjyeDfcGxbyQdwR0LwhSniYf3xbS2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tann
              68 | $2a$08$LwoiF92VlPVXMEml3Zusn.fsYXJPWRF47vYyudL5TGioo8C0a5MwS | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tanne
              69 | $2a$08$LwoiF92VlPVXMEml3Zusn.pJZR6sTrh2s03Y1KKALRXKr4jGBsBf2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannen
              70 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenm
              71 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenma
              72 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenman
              73 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann
              74 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann 
              75 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann C
              76 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Ch
              77 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Chr
              78 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Chri
              79 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Chris
              80 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christ
              81 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christb
              82 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christba
              83 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbau
              84 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaum
              85 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaums
              86 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumst
              87 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumstä
              88 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumstän
              89 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumständ
              90 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumstände
              91 | $2a$08$LwoiF92VlPVXMEml3Zusn.YUcO6giVKos8seJpKGG50VzZcxRrHv2 | Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmann Christbaumständer
(91 rows)

Ab Zeile 70 wiederholt sich der Hash—ergo sind die Paßwörter ab hier aus Sicht der Datenbank identisch. Konkret gesagt: Ob ich als Paßwort Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenm (das sind genau 72 Bytes) eingebe oder Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenma oder Paßwort Schlüsselfunktion Tischdeckenlieferung Weihnachtskekse Tannenmäääpw4909090fa-m 4 ist für die Datenbank irrelevant. ◀

Diskussion

1) pgcrypto: Max. password length: 72 for Blowfish.
2) Bruce Schneier, der Blowfish erfunden hat, empfiehlt, Twofish zu verwenden: At this point, though, I'm amazed it's still being used. If people ask, I recommend Twofish instead. Allerdings gibt pgcrypto das zumindest in Postgres 9.6 nicht her.
lavenzug/paßwort-hashing-mit-postgres.1479734106.txt.gz · Zuletzt geändert: 2016-11-21 14:15 (vor 3 Jahren) von Stefan Unterweger