WarpWallet challenges
WarpWallet challenges
bitcoin
Keybase's scrypt brainwallet. Four solved, two expired with the keys published.
- Author
- Keybase
- Prize recorded
- 41.85 BTC
- Still unsolved
- none
Census
- solved
- 467%
- expired
- 233%
- public keys
- 6100%
- private keys
- 6100%
Access
- Load
getCollection("warp") - Showwarp/challenge-1 in the playground
- Listall 6 in the playground
The puzzle
WarpWallet was Keybase's answer to weak brainwallets. scrypt with a salt, usually an email address, so a passphrase couldn't be brute forced with a plain SHA-256 wordlist. To prove it, they funded challenges with short passphrases and dared people to crack them. The four small ones fell. The two 20 BTC ones didn't. They expired on schedule, and Keybase published the passphrases when they took the coins back.
What the records carry
Every WarpWallet record carries the hex key, the WIF and the passphrase, plus the salt where one was used, as .passphrase(…) and .salt(…) on the key builder. The library verifies the key against the address, not the passphrase against the key. scrypt with WarpWallet's parameters is a different package's job.
Each record also carries the hint Keybase printed next to its wallet, as official(…) with a Wayback capture of the page for its confirmation. The page still shows five of them; for the first 20 BTC challenge it shows the answer instead, so the December 2013 capture is where that hint lives. Each confirmation points at the versioned page the capture holds, because the bare keybase.io/warp capture is a redirect stub that dies in a browser.
export const warpPuzzleChallenge1 = puzzle({
id: "warp/challenge-1",
chain: "bitcoin",
address: "1JKb1617p68H5MPkoNaMtaJCqKDU3h8qSn",
sourceUrl: "https://keybase.io/warp",
startedAt: "2013-11-19 20:12:25",
status: Status.Solved,
pubkey: uncompressed("045f75…51af"),
key: hex("20f5df9cba8251e90a66d3aa1ca2849b12eaca135abb837671ac4a2bc2014e2b")
.wif("5J4oWdwA5mSCP4GVWF237zgYK4h1csD2PfrmK3uh3YcRFSWZ2H1")
.passphrase("Je"),
prize: 0.1,
hints: [
official(
"this passphrase is 2 random alphanumeric characters, such as 'X9'.",
"https://keybase.io/warp",
confirmation(
"https://web.archive.org/web/20131213023906/https://keybase.io/warp/warp_1.0.6_SHA256_e68d4587b0e2ec34a7b554fbd1ed2d0fedfaeacf3e47fbb6c5403e252348cbfc.html",
"Wayback capture of the challenge page",
),
),
],
});
A two character passphrase and it still took a scrypt run per guess. That was the argument.
Status
expired is the status for the two big challenges. The author took the prize back when the deadline passed. The keys on those records are the ones Keybase published, so they verify like any solved puzzle. The warpwallet alias resolves to this collection in every lookup.
Every puzzle
One page each: the record, the transactions and the live balance.
- challenge-1 solved0.1 BTC1JKb1617p68H5M…DU3h8qSn
- challenge-2 solved0.25 BTC1NMjXhB2DW8pbG…8BTAkJKu
- challenge-3 solved0.5 BTC1FpxSs3tsvV8kn…yPq1QrvH
- challenge-4 solved1 BTC1GXXH7FbY7nCJD…EUi5GxfR
- warp-challenge-1 expired20 BTC1AdU3EcimMFN7J…3gF5ZnGj
- warp-challenge-2 expired20 BTC1MkupVKiCik9iy…4rkF3hnA