Privacy - Wat niemand over je mag weten

Hashes genereren van tekenreeksen

08-05-2015, 14:32 door Anoniem, 6 reacties
Tijdens een test met het generen van hashes van passwords/tekenreeksen/zinnen loop ik tegen het volgende probleem aan : niet alle tekens kan ik met onderstaande methode succesvol omzetten naar een hash.

Geteste tekens buiten de rest aan beschikbare toetsenbord tekens :
` ` ^ - , ; : ! ? . ' " ( ) [ ] { } § @ * / \ & # % ± < = > | ~ $ € | ~ $ €

Formules die ik probeerde maar niet werkten bij deze tekenset :
echo -n `^-,;:!?.'"()[]{}§@*/\&#%±<=>|~$€ | openssl sha1
echo -n `^-,;:!?.'"()[]{}§@*/\&#%±<=>|~$€ | openssl dgst -sha1
echo -n `^-,;:!?.'"()[]{}§@*/\&#%±<=>|~$€ | openssl dgst -sha256

Welke tekens nou allemaal precies niet werken en wanneer wel en wanneer niet (combinatie/volgorde?) wordt me nog niet geheel duidelijk.
Het erop dat het In ieder geval deze tekens lijkt te betreffen :
; ' " ( ) & # < > 

Maar in sommige gevallen niet en soms wel, afhankelijk van de combinatie met andere tekens ook het apestaartje (?)
@

Online generators, die ik juist niet wil gebruiken, kunnen genoemde tekens echter allemaal wel omzetten naar een willekeurige hash.
Kan ik daaruit afleiden dat ik tegen de beperking van het shell programma in kwestie aanloop omdat bepaalde tekens ook voor commands in shell worden gebruikt?
Of gebruik ik gewoon de verkeerde formules?

Vragen :

- Zijn er betere shell commands denkbaar die wel werken en wie weet welke dat zijn?
Bijvoorbeeld voor sha1 / sha256 / … ?
(niet te lang en wel sterk)

- Extra vraag, wat is de beste hash methode voor een tekenset met een resultaat korter dan plm 40 tekens of zelfs liever nog met een resultaat lager dan 30 tekens ?
(wees gerust, in idee niet bedoeld voor commercieel gebruik of data van derden en dit artikel* had ik al met interesse een beetje doorgebladerd)

Graag hoor ik een betere formule's voor shell of andere offline methoden van wie het weet (onder osx, terminal).

Alvast bedankt / groet,
(op dit topic) Cryptn3us P1m


* http://arstechnica.com/security/2013/05/how-crackers-make-minced-meat-out-of-your-passwords/1/
Reacties (6)
08-05-2015, 16:20 door Anoniem
Heb je geprobeerd om die speciale tekens te escapen met een \ (backslash)?
08-05-2015, 18:02 door Erik van Straten - Bijgewerkt: 08-05-2015, 18:03
Gebruik een editor waarvan je zeker weet dat deze geen newline karakter (Linux: 0x0a, Windows: 0x0D0A) en geen EOF (End-Of-File) karakters toevoegen (is kennelijk lastig onder Linux, zie bijv. http://askubuntu.com/questions/13317/how-to-stop-gedit-gvim-vim-nano-from-adding-end-of-file-newline-char).

Als je de file opslaat als "karakters.txt" kun je onder Linux daarna uitvoeren: openssl sha1 < karakters.txt

Onder Windows:
> notepad kakakters.txt
Voer in (zonder Enter te geven op het einde van de regel):
; ' " ( ) & # < >
Save

> od -tx1 karakters.txt
0000000 3b 20 27 20 22 20 28 20 29 20 26 20 23 20 3c 20
0000020 3e
0000021

> openssl sha1 < karakters.txt
(stdin)= 6f339af8d97e1a102f20fd4a64cbb8a9c4907359

> fciv -sha1 karakters.txt
//
// File Checksum Integrity Verifier version 2.05.
//
6f339af8d97e1a102f20fd4a64cbb8a9c4907359 karakters.txt

> sha1sum karakters.txt
6f339af8d97e1a102f20fd4a64cbb8a9c4907359 karakters.txt

Bovenstaande karakterreeks ingevoerd in http://www.sha1-online.com/:
6f339af8d97e1a102f20fd4a64cbb8a9c4907359

Nb. om bovenstaande commando's uit te kunnen voeren moet je natuurlijk wel notepad.exe, od.exe, openssl.exe, fciv.exe en sha1sum.exe op je Windows systeem in het zoekpad (PATH) hebben. Zonder boordmiddelen kan ook, zie https://www.security.nl/posting/401468/sha256+onder+Windows+zonder+tools.
08-05-2015, 19:49 door Anoniem
@ Erik
Vriendelijk dank voor de tip! Het werkt.
Ook onder Mac OS X !

• Mac OS X, geopend in TextEdit.app, een plain text file aangemaakt met de karakters (en spaties)
; ' " ( ) & # < >
opgeslagen als file karakter.txt

In Terminal.app (OS X hulpprogramma's) geeft resultaat :
$ openssl sha1 < /Users/Cryptn3usP1m/Desktop/karakter.txt
6f339af8d97e1a102f20fd4a64cbb8a9c4907359
Via www.sha1-online.com/ geeft resultaat :
6f339af8d97e1a102f20fd4a64cbb8a9c4907359


• Mac OS X, geopend in TextEdit.app, een plain text file aangemaakt met de karakters (zonder spaties)
`^-,;:!?.'"()[]{}§@*/\&#%±<=>|~$€
opgeslagen als file helereekskarakters.txt

In Terminal.app (OS X hulpprogramma's) geeft resultaat :
$ openssl sha1 < /Users/Cryptn3usP1m/Desktop/helereekskarakters.txt
90ac587dfaa1d8994b6e7bf3b33e6163555e9d94
Via www.sha1-online.com/ geeft resultaat :
90ac587dfaa1d8994b6e7bf3b33e6163555e9d94


• Het antwoord op de andere vraag denk ik ook te hebben gevonden.
Een SHA1 hash met als output Base64 Encoding levert 28 tekens op (zie ik weliswaar met een online generator)...

Sha1 met output Base64 Encoding
`^-,;:!?.'"()[]{}§@*/\&#%±<=>|~$€
geeft resultaat :
g0MC6bm1FZkP3qfEA2XjJurfBrA=

Dat is mooi om te weten, eens kijken of dit dan ook offline om te zetten is onder OS X, de combi met sha1 is nog even stoeien zie ik.
Eventuele tips ook daarbij nog steeds welkom van wie daar toevallig meer van weet.

Groet,
Cryptn3us P1m
09-05-2015, 09:57 door Anoniem
even nieuwsgierig: werkt escape character niet? Escape-character is de backward slash: \ Die kan je dan zetten voor het speciale karakter.

\`\^\-\,\;\:\!\?\.\'\"\(\)\[\]\{\}\§\@\*\/\\\&\#\%\±\<\=\>\|\~\$\€ zo dus
09-05-2015, 14:22 door Anoniem
Door Anoniem: even nieuwsgierig: werkt escape character niet? Escape-character is de backward slash: \ Die kan je dan zetten voor het speciale karakter.

\`\^\-\,\;\:\!\?\.\'\"\(\)\[\]\{\}\§\@\*\/\\\&\#\%\±\<\=\>\|\~\$\€ zo dus

Bedankt voor de toelichting, die was kennelijk nog nodig voor het plaatselijk begrip.
$ echo -n \`\^\-\,\;\:\!\?\.\'\"\(\)\[\]\{\}\§\@\*\/\\\&\#\%\±\<\=\>\|\~\$\€ | openssl sha1
90ac587dfaa1d8994b6e7bf3b33e6163555e9d94

Als eerder geconstateerd gaf www.sha1-online.com/ het resultaat :
90ac587dfaa1d8994b6e7bf3b33e6163555e9d94

Conclusie,
ja Dat werkt ook!
Dank voor de tip en vooral de toelichting. Bij escapen denk ik aan er vandoor gaan of het programma verlaten, kon de opmerking dus niet plaatsen.

Groet,
Cryptn3us P1m,

alias (voorbeeld)
084324e011ba5bbdedba4b5c53140ed0b1fe72c3
danwel pseudo anoniem alias (voorbeeld)
CEMk4BG6W73tuktcUxQO0LH+csM=
De laatste is nog gegenereerd, in verband met de Base64 Encoding, met een online generator. Het nadeel van online genereren en daarom ongewenst, is immers dat deze methode in principe geen anonimiteit garandeert.

Over de lengte, onder de 30 karakters kan soms gewenst zijn wanneer je het hashen van informatie zou willen toepassen op bijvoorbeeld registratie accounts en toch binnen soms lagere limieten van het maximaal aantal in te voeren karakters te kunnen blijven.

Worden limieten lager dan 28 karakters, dan wordt het nog interessanter.
Ik zie zo gauw geen 64 bit (16 karakter methoden?). Behalve in theorie crc64, die schijnt veel te onveilig te zijn en komt misschien daarom ook niet voor in online calculators.
De crc32/Adler32 varianten worden dan wel weer erg kort en eenvoudig te achterhalen?
ea6e101f
geeft een gelijke lengte met Base64 Encoding
6m4QHw==

Nuttige, creatieve inzichten altijd welkom.
09-05-2015, 19:04 door Anoniem
Door Anoniem:
[..]

Worden limieten lager dan 28 karakters, dan wordt het nog interessanter.
Ik zie zo gauw geen 64 bit (16 karakter methoden?). Behalve in theorie crc64, die schijnt veel te onveilig te zijn en komt misschien daarom ook niet voor in online calculators.
De crc32/Adler32 varianten worden dan wel weer erg kort en eenvoudig te achterhalen?
ea6e101f
geeft een gelijke lengte met Base64 Encoding
6m4QHw==

Nuttige, creatieve inzichten altijd welkom.

Als de feitelijke input data erg kort is, dan is een brute force zoektocht altijd mogelijk, voor iemand die de hash uitkomst heeft.
Als praktische implementatie kun je korte data altijd prependen/appenden met een bekende string en dan een hash met een langere blocksize gebruiken.
Als je een 4-cijfer PIN moet hashen, hash je dan een vaste string van 12 bytes, met 4 bytes erachter waar de pin in zit. (16 bytes -> 128 bits).
Eventueel hash je geen 12 vaste bytes, maar 12 willekeurige bytes ('salt') gevolgd door de PIN. De gebruikte salt moet je bij de hash uitkomst opslaan.
Maar hoe dan ook kan iemand die de hash (+salt/prepend) heeft met maximaal 9999 mogelijkheden de PIN vinden, daar is niks aan te doen als de invoerlengte zodanig beperkt is.

Een CRC is een mooie controle voor willekeurige bitfouten en heel simpel in hardware te bouwen, maar heeft een structuur die het simpel maakt om een invoer te construeren die een gegeven CRC als uitkomst heeft. Dat maakt CRCs totaal ongeschikt voor cryptografische toepassing.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.