## #IBM Quantum Challenge

I just got finished submitting my last optimization circuit for the 2020 IBM Quantum Challenge. It was a hectic 4 days of spare time working through their challenges but very rewarding. It’s amazing what a small concept like a “Challenge” can do for your motivation to understand more about a technology or field, but to me the size of Quantum Computing community seems to have, all of a sudden, grown larger.

There have been over 5 billion circuits run against IBM Q, 1,745 participants, over 1000 people in a Slack channel who were sharing, bantering and encouraging their peers and a considerable amount of learning about circuit optimization. If I had only brushed up on my linear algebra I think I would have done a little better ðŸ˜‰

## Side Project: qubitÂ²

Over the past couple of years I have had a keen interest in quantum computing and the optimism of its benefits over traditional computing methods. I have read countless papers, articles and spent a considerable amount of time deciding how I would explain it to a 5 year old.

ELI5: A normal computer is like a light switch is either on or off. A quantum computer is more like a dimmer switch, it can be partially on, or partially off.

It’s overly simplistic but gives a simple understanding of the potential states that the device can be in. I also wonder how I would explain QC to friends or technology friends. Trying to find the right words that quantify both its elementary simplicity and its quantitative complexity is difficult, especially when you yourself don’t fully grasp it. But like other technologies, the best way to learn is by doing … experimenting, researching and proofing. Leading to your own understanding and comprehension of existing anecdotes and theories or new ones.

## A simplistic Node.js implementation of RSA encryption/decryption

This is a basic and simplistic implementation of RSA in JS which used to understand the implementation/math required for encryption/decryption and opportunities for hacking RSA using Quantum Computing.

If you are looking for a nice article on RSA and a small practical example, this might be helpful https://simple.wikipedia.org/wiki/RSA_algorithm

Hacking RSA using Prime Number Factorization

Hacking RSA uses the numeric public exponent from the public key and tries to calculate its largest common multiple factors (p and q) – from those two numbers you can calculate the Private Key. Using traditional computing to hack “small” RSA public keys can be done with a few modern algorithms, including the currently fastest General Number Field Sieve.

A nice library for General Number Field Sieves is http://cado-nfs.gforge.inria.fr/

You can use this site to factor a prime without having to install anything https://asecuritysite.com/encryption/factors. Enter the Public Key which gets generated by the code (should be < 100 bits for the site to be able to factor)

## Installation

``npm install``

## Usage

Edit the index.js file if you would like to edit the size or message being encrypted:

``````// Message
const message = 'Hello';

// Generate RSA keys (bits), max is 232 digits (768 bits)
const keys = RSA.generate(80);``````

Run the code

``npm run start``

## Example Output

```Public Key Exponent (e):65537 Random Prime (p): 798000088811 Random Prime (q): 563631878177 Totient (lcm of (p-1)(q-1)): 224889144420297550405280 ------------------------------------------------- Keys Public Key (n = p * q): 449778288841956732777547 Public Key Length: 24 digits (79 bits) Private Key (d = e multiplicative inverse (totient)): 210473481577786144493313 Private Key Length: 24 digits (78 bits) ------------------------------------------------- Message: Hello Encoded: 72101108108111 Encrypted (c = encoded message (m) ^ e modulo n): 426078873740860671226694 Decrypted (m = encrypted message (c) ^ d modulo n): 72101108108111 Decoded: Hello Correct? true```