Dining with Friends(developing yet)


Inviting friends to dinner > cracking a bank encryption system

Using this package, we could showcase the problem how inviting friends to a dinner party is harder than cracking a bank encryption system.Let's introduce some background knowledge.

Intor to RSA

RSA is a public-key cryptosystem. It's widely used in encryption algorithm that helps secure bank transactions and communications. Here's the Introduction->RSA encryption. Easily explained, there are public key $(n,e)$ and private key$(n,d)$. The attacker needs to factorize the $n$, a product of two large prime numbers. So the security of RSA comes from factoring problem.

Factoring problem

The factoring problem is to find the prime factors of a composite number. It's a pratically hard problem. Generally, the input size in RSA is 2048 bits. Consider two algorithms to solve it: General number field sieve(GNFS, a good algorithm in factoring) and Brute force.

AlgorithmTime complexityOperationsTime ($10^{12}$ ops/s)
GNFS$O(e^{(\log n)^{1/3}(\log \log n)^{2/3}})$$2^{112}$$≈ 7 \times 10^{20}$ years
Brute force$O(\sqrt{n})$$2^{1024}$$≈5.7 \times 10^{228}$ years

Both are way longer than the age of our universe.

So basically, RSA relies on factoring and if we could reduce factoring to maxcut problem, we could show that inviting friends to a dinner party is harder than cracking a bank encryption system. Next part, I'll reduce factoring to the maxcut by: Factoring -> Circuit Sat -> SpinGlass -> MaxCut.


Factoring -> MaxCut

using ProblemReductions, Graphs, LuxorGraphPlot

For a given number $n$, we could create a factoring problem.

Create a factoring problem

reduce the factoring to the circuit Sat problem

could I visualize this circuit Sat?

reduce the circuit Sat problem to the SpinGlass problem

Visualize this SpinGlass problem

reduce the SpinGlass problem to the MaxCut problem

Visualize this MaxCut problem and explain how the maxcut problem represents inviting friends to a dinner party


This page was generated using Literate.jl.