Answered step by step
Verified Expert Solution
Question
1 Approved Answer
* Install the Python library ` pycryptodome ` by executing the following in a code cell. ` ` ` ! pip install pycryptodome ` `
Install the Python library pycryptodome by executing the following in a code cell.
pip install pycryptodome
Import some functions we will use by executing the following code. This will raise an error if pycryptodome hasn't been successfully installed.
from Crypto.Util.number import getPrime, getRandomNBitInteger
from sympyntheory import norder
from LabHelper import
onlyletters,
weave,
shiftstring,
addspaces,
tobaseb
frombaseb
Paste in your code defining the vigenere function from Lab It has been included all the necessary imports like onlyletters but feel free to add more if your vigenere function depends on them.
Paste the code defining the naivedlog function.
def naivedlogg h p:
output
for i in rangep:
output outputgp
if output h:
return i
return None
The getPrime function imported above takes as input an integer N and as output returns a random Nbit prime number. For example, written in binary is which is digits, so is a bit prime number. You can verify this by evaluating tobaseb and checking that the resulting list is length The frombaseb function goes in the opposite direction.
Choose a prime p using the getPrime function. See the next few instructions to help you decide how large the prime should be
Find a generator g for $mathbbZp$Hint Use the norder function that we imported from SymPy Call helpnorder to see how this function works. What order do we need to have a generator? You will have to do some guessingandchecking or better, use a for loop, calling break when you've found a generator but it shouldn't take many guesses before you find a generator.
Call naivedlogg p and time how long it takes using time at the top of the cell. We already know that no discrete logarithm exists in this case why so the point of this is just to see how long the naive discrete logarithm takes to run in the worstcase scenario.
We want a prime for which this naive discrete logarithm calculation takes seconds. If your prime takes an amount of time outside of this range, then change the values of p and g above until you find values for which it takes seconds.
Again using the getPrime function, find a prime p which is bits larger add don't multiply than the prime p you found above.
As above, find a generator g for $mathbbZp$
We estimate that multiplying p by M will multiply the amount of time the naive discrete logarithm takes by M Using this estimate, how many days would you expect the naive discrete logarithm to take for pYour answer should depend on pp and on the number of seconds given by your timing computation above. Do not try to run the naive discrete logarithm function on p directly. Be sure your answer is in days, not in seconds.
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started