NICKS - 2017
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:
- 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)
- 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.
- 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).
- The allow-list must not include names, such that Proceed / Do Not Proceed information cannot be obtained about Bob without Bob’s permission.
- 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.
- Bob should never need any of Alice’s information to complete the sale.
- 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.