Collections

WarpWallet challenges

Keybase's scrypt brainwallet with six funded challenges from 2013 to 2016. Four solved and two expired with the keys published afterwards. 41.85 BTC in total.
load
getCollection("warp")
puzzles
6 · 4 solved · 2 expired
prize recorded
41.85 BTC
still unsolved
-
known material
6 public keys · 6 private keys
bitcoinstarted 2013-11-19 to 2016-02-01 open warp/challenge_1 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.

src/collections/warp/challenge_1.ts
export const warpPuzzleChallenge1 = bitcoinPuzzle({
  id: "warp/challenge_1",
  address: p2pkh("1JKb1617p68H5MPkoNaMtaJCqKDU3h8qSn", "bdfe0236c752bbf8610b47c57b8c8592230dc575"),
  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,
});

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.

warp.all()6 puzzles

4 solved 2 expired

  1. challenge_1 solved
  2. challenge_2 solved
  3. challenge_3 solved
  4. challenge_4 solved
  5. warp_challenge_1 expired
  6. warp_challenge_2 expired

every name is a page · the key icon marks a published private key

@agntn/puzzles·MIT license· Public data about public puzzles. Balances come from the chains' explorers through the worker, cached for five minutes. Every key here was public before it landed in a record.