Math 480, Spring 2015, Assignment 4
From cartan.math.umb.edu
Revision as of 02:22, 24 February 2015 by Steven.Jackson (talk | contribs) (Created page with "__NOTOC__ ==Carefully define the following terms, then give one example and one non-example of each:== # Vernam one-time pad. # Discrete exponential function $\mathrm{exp}_g...")
Carefully define the following terms, then give one example and one non-example of each:
- Vernam one-time pad.
- Discrete exponential function $\mathrm{exp}_g:\mathbb{Z}_{p-1}\rightarrow\mathbb{Z}_p^*$ (as an example, do a sample calculation).
- Discrete logarithm function $\mathrm{log}_g:\mathbb{Z}_p^*\rightarrow\mathbb{Z}_{p-1}$.
- Discrete logarithm problem.
- Diffie-Hellman problem.
Carefully describe the following algorithms:
- Diffie-Hellman key exchange.
Solve the following problems:
- Exercises 2.4 and 2.6.
Coding projects:
- (Primitive roots) Write a (possibly slow) algorithm that takes a prime $p$ as input, and produces a primitive root for $\mathbb{Z}_p$ as output.
- (Discrete logarithm) Write a program that computes discrete logarithms by some reasonably obvious method. Find out how large you can make the modulus before your program becomes unusably slow and/or runs out of memory.
- (Diffie-Hellman) Implement the Diffie-Hellman key exchange protocol. (You will need some way to simulate two communicating parties. Perhaps the ideal solution is two have two processes communicating through pipes; for real applications it is easy to replace pipes by TCP sockets. If you don't know how to use pipes, communicating through temporary files is fine too. Better still: find a partner and exchange a key by e-mail. When you meet in person, verify that your computed keys coincide. Copy your e-mails to an adversary, and see how large you need to make the modulus before your adversary is unable to compute the key.)