Fresh out of the 2016 election I had a lot of frustration to work out. I wanted to do something productive with that angst, but my only real skill is programming computers. I needed a problem to solve, and “just all of modern American politics” wasn’t a software problem. Most problems aren’t.

Around this time I was still frustrated by the way the Coburn Proposal fizzled out. Democrats kept bringing up Universal Background Checks as a sound gun policy, and Republicans kept using fear of gun confiscation as a cudgel. Neither party was interested in fielding a proposal that the other party was inclined to consider. The Coburn Proposal seemed so … obvious. Here was a compromise that would achieve the stated goals of both parties. Even better, the Coburn Proposal was literally a proposal for the government to build and deliver a software-based solution to Universal Background Checks.

I decided that I could probably build a phone app that did exactly what Coburn was talking about. This is when I started working on NICKS - the National Instant Criminal (Key-Based) Background Check System . What a terrible acronym.

NICKS had some very explicit goals. In the spirit of the crypto books I was reading at the time I used every cryptographer’s favorite stand-ins for users - Alice and Bob. Here’s the list of goals I wrote down when I started working on this project:

NICKS Goals:

  1. This system must allow Alice to verify that Bob is not a prohibited purchaser no matter who Alice is (i.e. even if Alice is not an FFL)
  2. No internet traffic from this system should result in being able to positively identify that Alice or Bob engaged in the sale of a firearm.
  3. Inclusion on the public Ledger used to provide Proceed / Do Not Proceed information must not be proof that you own a gun. (i.e. the Ledger can’t be a registry).
  4. The allow-list must not include names, such that Proceed / Do Not Proceed information cannot be obtained about Bob without Bob’s permission.
  5. Even with Bob’s permission, Alice should only get Proceed / Do Not Proceed information about the sale of a firearm, not any reason for the denial.
  6. Bob should never need any of Alice’s information to complete the sale.
  7. Transaction should result in records for Alice that positively identify that Alice performed the check on Bob, and Bob is who he says he is.

I designed this app for the truly paranoid. The first iteration didn’t use any network connections at all - it consisted entirely of scanning QR-codes off of phone screens. Unfortunately I don’t have a single screenshot of this first version of the app, but it was rough. I was able to find the old XAML markup from this first iteration. Yikes.

While it worked as a Proof-of-Concept for the whole “verify Bob is who he says he is” part, I didn’t ever get around to implementing the “the Government agrees this person is Bob” part. This was my first ever phone app, and I got too bogged down in the phone part of it. There were enough hard problems to solve here without learning an entirely new paradigm of application programming.

I never finished this iteration of NICKS. I still have the old code, but I was building this for Windows Phone. I don’t have a Windows Phone anymore and I’m pretty sure the SDK is long out of support. This version will likely never be resurrected, but I worked on other versions I’ll talk about later.