To Know: The “Quantum” chapter of the text is now up in canvas.
To Do: Quantum Key Distribution!
I think this will get confusing with everyone simultaneously on the #ciphertexts channel, so I want you to do this in pairs in the “IN CLASS” channel category of discord. There you will find plenty of text channels, so fill them up with two people each as you arrive, taking the first empty spot (the first person needing a partner or the first unused channel). Announce your arrival. The first person to arrive in a channel is Alice, the second person to arrive is Bob. Once two people are there, it’s full, so pick the next channel. You’ll do all communication on the channel so I can help you debug if it doesn’t work.
Open up the QKD BB84 Tools. The first box contains some code to initialize; no need to read this, just run it. The second box is a spot where you can either create photons (in our instantiation, they are just integers), or measure existing photons. It just holds an example for now.
Once you know if you are Alice or Bob, follow the protocol for your role.
Choose a sequence of 16 random choices of basis: example V L V V etc. The best way to do this is with a random number generator (like randint() in Sage).
Now choose a sequence of 16 bits: example 011001010101 etc. Again, true or good pseudo-randomness is best.
Use your two sequences to generate photons using the command create_photon in the QKD BB84 Tools page. This will create 16 integers (the photons), which you should obtain and paste into the channel as your “outgoing photon stream”.
Wait until Bob harvests your photon stream and reports that they are done “measuring” the photons.
Then, post to the channel the list of bases you used on your photons.
Bob will also post their list of bases used on the channel.
Then, determine the shared secret key from these two lists. Share it and see if Bob agrees.
Choose a sequence of 16 random choices of basis: example V L V V etc. The best way to do this is with a random number generator (like randint() in Sage). Keep this secret for now.
Alice will create a stream of photons (integers). Harvest (cut-n-paste) Alice’s photon stream, and use the command measure_photon() in the QKD BB84 Tools page to measure them using your list of bases (first basis to measure first photon etc.) Record the measurements and keep them secret.
Report to the channel you have finished measuring.
Then, report to the channel your list of bases.
When Alice also reports her list of bases, derive the shared secret.
Then, post the shared secret you derived to check if it agrees with Alice’s.
To Do: When you’re done, just post to canvas a screenshot or record of your experience; you can screenshot the channel or you can screenshot your spreadsheet or a text file you kept a record in; whatever, just to show you did it.
To Do: Listen to this podcast (26:53). It’s a quantum computing entrepreneur talking about the current (well, 2017) take on how it fits in the big picture. He discusses things like Moore’s Law and the current state of computing, and what quantum computers should be able to do in the future.
To Do: Here’s an exercise (here’s latex source) in measuring a qubit with respect to different bases. Please hand in the answer on canvas.
To Do: Think about the polarized filter experiments I referred to at the end of the lecture — I’ll start with them next lecture, so try to figure out what happens in them before you come to class.
To Know: We’ll soon finish elliptic curves, isogenies and lattices, so I’ll be putting together an assessment soon. Next up: quantum key exchange, quantum computers and quantum cryptanalysis.
To Do: A Ring-LWE ciphertext chain! You may want to review the course video on canvas and the class notes under “History“. Here’s what you’ll need:
Our general setup with be the prime p = 100000000003 and n=8. We will use k=100. (This will allow us enough room for a 3-letter word in ASCII as the message m.)
At the Ring-LWE Tools page you’ll see how to initialize the polynomial ring, and you’ll have two functions that generate short and random elements. In our case, “short” means coefficients from {0,1,-1}.
First, generate your own private/public key pair and post the public key (a,b) on the discord #ciphertexts channel. Keep your secret key for later (e.g. in a text file). Important note: to make it easier on everyone, surround your polynomials with backticks ` when pasting into discord, and it will post it verbatim, i.e. not interpret the asterisks as emphasis etc. This will make cutting-and-pasting into Sage easier.
Next, choose your favourite three-letter word and put it into ASCII (Here’s the tool). This is your message. Now, encrypt your message to the most recent unused public key on the #ciphertexts channel. Post your message (v,w) on the #ciphertexts channel and mention the appropriate person.
Wait until someone sends you a message. When this happens, decrypt it using your secret key (here’s the ascii to letters tool), and announce their favourite 3-letter word on #ciphertexts, mentioning them so they can confirm.
Post your record of the events/computations to the canvas dropbox.
To Do: By hand, find a reduced basis and a shortest nonzero vector in the lattice generated by (58,19) and (168,55). (We covered this in Monday’s class; also see section 17.2 in text, available on canvas.) Hand in on canvas.
Quick announcement: since students asked, I produced solutions to the El Gamal Ciphertext Chain task (this is a video available on canvas) and to the Break EC signatures when k is reused task.
CU Boulder is encouraging everyone in our community to vote. All the information you need is here, at this CU Boulder website: Your Vote, Your Voice.
There will be no daily task homework due Wednesday.
To Know: Don’t forget your re-do problems for module 1 and 2 (optional); see canvas.
To Know: I’ve been asked for solutions to the last two daily post tasks and I’ll make some videos about that over the weekend.
To Do: Watch this YouTube Video. This is my friend, mentor and collaborator, Dr. Kristin Lauter, from Microsoft Research. She’s giving a fairly generally accessible talk about a lot of different aspects of modern cryptography. She has a lot of perspective on this because she’s in industry — she does the underlying math and the deployment and implementation. She is one of the first people to propose using isogeny graphs in cryptography, for hash functions. You’ll find lots of interesting stuff in here about practicalities and cryptography in the real world, like the future of cryptography after quantum computing. It’s a great overview that should be just perfect for this moment in the course, where we’ve done the classical and pre-quantum crypto and are ready to dive into the newest of the new.
To Do: Just hand in some reactions to the video: What questions did you have? What did you learn? 3-6 sentences is fine.
To Know: I’ve put together a set of links to the most recent cryptography resources (for cutting edge research) since it was requested in class. Check back to the “Resources” tab soon. One interesting link is the article “The Uneasy Relationship between Mathematics and Cryptography”, which is one person’s experience of the last few decades and some of the conflict and disagreements in the field, among other things.
Totally optional extra resources: Here’s a YouTube Video (20 mins) that introduces isogeny-based cryptography, but with an emphasis on SIDH (not CSIDH), which is an earlier variant. It’s aimed at an undergraduate audience that knows what groups are. It has some review of the basics of elliptic curves and of Diffie-Hellman Key Exchange, so it may be of some interest for that reason too. But this one is totally optional.