18.03.2015

Bitcoin Wallet: Passphrase vergessen :(

Wenn man sich ein Bitcoin-Portemonnaie, also ein Wallet, einrichtet, wird man mehrfach und eindringlich gewarnt:

Die Passphrase muss so kompliziert und damit sicher sein, dass niemand sie errät oder zu einfach durch ausprobieren darauf kommen kann, denn sonst wären ja die Bitcoins in Gefahr bzw. ganz leicht futsch. Und deshalb muss es auch ein ganzer Pass-Satz sein, ein einfaches Passwort wäre viel zu unsicher. Gleichzeitig ist es natürlich sehr wichtig, dass man die Phrase nicht vergisst, sonst kommt man selber an sein Geld nicht mehr dran. Es gibt tatsächlich keine Möglichkeit, dieses Geheimnis zu umgehen, den Nebensatz mit NSA spar ich mir.

Gewissenhaft, wie ich bin, habe ich die für mich bestmögliche Strategie erdacht, um die Passphrase zu finden und mir zu merken. Dabei orientiere ich mich gerne an Songs, die ich gerade gut finde - möglichst welche, die ich schon lange gut finde, damit ich mich erinnere. Wenn man da die bestern Textzeilen nimmt, kann die eigentlich niemand wissen und ich müsste mich erinnern.

Und zwar weiß ich noch genau, dass ich da grad…. tja, Udo Lindenberg gehört habe.

Nun bin ich nicht unbedingt ein Udo-Lindenberg-Fan, aber es gibt einige Lieder, die haben während der Kindheit in mein Gedächtnis eingebrannt.

Das Bitcoin-Vermögen, das ich besitze, beläuft sich auf die schwindelerregende Summe von 0,1135 BTC, also gut ein Zehntel Bitcoin. Gekauft habe ich diesen Bruchteil bei einem obskuren Händler in Kroatien, der nicht so viele Daten von mir haben wollte, und das hat prima geklappt. Ich musste ihm dafür 50 Euro sepa-überweisen. Das war so ungefähr vor einem Jahr, und heute sind es noch ungefähr 30 Euro. Hervorragendes Geschäft. So ähnlich war es damals auch, als ich das eine Mal Aktien gekauft hatte.

Und nun wollte ich mal eine Online-Zeitschrift abonnieren, und die nehmen Bitcoin! Was für eine coole Gelegenheit, datensparsam zu zahlen und auch diese depperte Geldanlage los zu werden. Aber damit fing das Gegrübel an.

Welches Lied war es gleich noch, und wenn ja, welche Zeile daraus? Erst habe ich so rumprobiert in der Dialogbox und immer die gleiche Antwort bekommen: Die Passphrase sei falsch. Dann dachte ich, okay, systematisch. Habe ein Dokument begonnen, in dem alle schon probierten Zeilen stehen.

Dann so Fragen: Hatte ich Umlaute benutzt oder ae/oe/ue etc.? Normal benutze ich keine Umlaute in Passwörtern. Waren es zwei Textzeilen, um es ganz sicher zu machen? Waren die dann mit Schrägstrichen getrennt, und waren vor und hinter den Schrägstrichen Leerzeichen, oder waren es Kommata oder nur Leerzeichen? Hab ich mehr Sonderzeichen untergebracht, indem ich Dinge wie “hab’” benutzt hab, waren Zahlen ausgeschrieben oder als Ziffern dargestellt? So ergab jede Textzeile locker 16 Kombinationsmöglichkeiten.

Nachdem die Datei so 30 Zeilen hatte, schaltete sich natürlich mein Programmierer-Ego dazu. Der Bitcoin-Client kann auf der Kommandozeile das Kommando “Wallet öffnen” verarbeiten, aha. Also konnte ich ein Programm schreiben, das aus einzelnen Zeilen verschiedene Möglichkeiten macht und diese durchprobiert. Aus jeder Zeile, die rein geht, werden bis zu 48 oder so Versuche.

Dann habe ich nach lyrics gegoogelt und diese jeweils den Programm gegeben. Manchmal auch noch Schreibweisen geändert, die ich so nicht gemacht hätte.

Leider…. kommt bisher jedes Mal error 14. Bad passphrase. Ich habe das richtige Lied noch nicht gefunden, oder das Programm trifft noch nicht die richtige Kombination. Derzeit bin ich ratlos und sehe die restlichen 30 Euro meiner ehemals 50 Euro langsam immer transparenter werden…

#!/usr/bin/perl -w

# moritz@carrefour:~/src/bitcoin-0.9.2-linux/bin/64$ ./bitcoin-cli walletpassphrase "Und du" 2
# error: {"code":-14,"message":"Error: The wallet passphrase entered was incorrect."}

@lastlines = ();
while($line = <>) {
		next if ($line =~ /^\s.*$/);
		next if ($line =~ /^\#/);
		$line =~ s/\n//;
		unshift(@lastlines, $line);
		pop(@lastlines) if ($#lastlines ge 3);
		# &doLine($line);

		my $alllines = "";
		for (my $i = 0; $i le $#lastlines; $i++) {
				$alllines = $lastlines[$i] . ($alllines ? ",":"") . $alllines;
				&doLine($alllines);
		}
}

sub doLine {
		my $rawline = shift;
		my @all = slashes($rawline);
		my @newall;
		foreach $rawline (@all) {
				push(@newall, &umlauts($rawline));
		}
		@all = @newall;

		foreach $p (@all) {
				&check_passphrase($p);
		}
}

# replace , by /, varying spaces.
sub slashes {
		my $p = shift;
		my @result;
		push(@result, $p);
		$p =~ s@\s*,\s*@/@g;
		push(@result, $p);
		$p =~ s@\s*/\s*@ /@g;
		push(@result, $p);
		$p =~ s@\s*/\s*@/ @g;
		push(@result, $p);
		$p =~ s@\s*/\s*@ / @g;
		push(@result, $p);
		$p =~ s@\s*/\s*@ @g;
		push(@result, $p);
		@result;
}

sub umlauts {
		my $p = shift;
		my @result = ($p);
		$p =~ s/ä/ae/g;
		$p =~ s/ö/oe/g;
		$p =~ s/ü/ue/g;
		$p =~ s/Ä/Ae/g;
		$p =~ s/Ö/Oe/g;
		$p =~ s/Ü/Ue/g;
		$p =~ s/ß/ss/g;
		push(@result, $p);
		@result;
}

sub check_passphrase {
		my $phrase = shift;
		print "checking \"$phrase\"...\n";

		my $ret = system(( "./bitcoin-cli", "walletpassphrase", $phrase, "1" ));
		$ret = $ret >>8;
		if ($ret != 14) {
				print "non-14 ret value: $ret\n";
				print "\"$phrase\"\n";
				die;
		}

}

Tags: ,

1 Kommentar

From: heinz
2016-03-23 13:46

Hast du denn wenigstens mit einem neuen wallet mit bekanntem passwort ausprobiert ob dein Programm richtig funktioniert? Übrigens ist es keine gute Idee Worte aus einem Song oder so zu nehmen. Hacker mit leitungsfähiger Hardware werden das selbe tun. Andererseits ist es besser als die meisten Methoden eine passphrase zu bilden. Um Bitcoin zu sichern kann man eine paperwallet benutzen und diese erst kurz vor der Benutzung in eine programmierte wallet entleeren.
Ich wünsche dir viel Glück beim finden des Passwortes!

Kommentar schreiben

Alle Kommentare werden erst nach Moderation veröffentlicht. Einfaches HTML ist erlaubt.

Name*:
E-mail*: (wird nicht veröffentlicht)
Website: