# OK to post # HW24, Robert Dougherty-Bliss, 2024-04-20 # 1. cemetaryResponse := proc() return {6, 8}: end: # 3. # Just for the record, our code is really bad at generating keys! On my # desktop, MakeRSAkey(1000, 10) took about 11.6 seconds. That's a key of # roughly 3321 bits. Really secure RSA keys have 4096+ bits. On linux, you can # use openssl to generate keys using efficient algorithms: # openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 # openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:8192 # etc. # The first one takes about 0.5 seconds on my desktop, while the second one # takes about 10 seconds. # The output looks like this (using 2048 bits): (* $ openssl genpkey -algorithm rsa -quiet -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDxePnpTK9D1ocU MSVCx+Zg/I2Rje8m9jheIvIJ/OPTBbieL+a1bUux/2DMxksCMkm6sht7MAukMPSN kVfjBqindKguP06/l8vxF6jboz9SX2FtCBpHN0Irjtu60FDk7dIXMl5YnfQwHKRc NHbBa2eAZQgucZsw+sFVCOPX4+ePjiREt2oVd4otgP06gMRglPImqgHxdUu/tXYt PqPoqWqs/E7Z/Lj/GzVc7yLUVTLTD0xd0lfmpkfS2Z9Ztg6TMp+BXe2GVbD7a+A+ dTTGA+uBnbv86LlBfW4BPojiKuzgZwuavNPTFQfwwOgE2NK31jongHhc7SvptMWg hOvKQmodAgMBAAECggEAAqLi+5iSO0fezqogsYN0MO/g7ctiZob+o4x3HwPLSvT/ iH6WYrmwP1+9405w6DO7WVXzddtW7TJ5oQgKsRhUBAwCgArB5daW6+lptwgnu1L+ Qc36V3ezeb1ECdyXXYB5MDalEAudbF8LrlQGTeNJzH2N4s/rtVOvg6mmryc2Unth 3SsFj9XVcO0LjUOERVK1CvPJ/5F35by4QMl0aSZBg3x1R1p9ms6I26eqF39MABDO 2XUdg9ViBpYO3xLcuo068PGN5pG+mv4z+zI3KjQCDtxYfL/PZfyYLiblc5qysf0g LdY45D6WBcW9Jmod7pmv6NRDcdp6qxZTOz7Ns6iiIwKBgQD3jX1+IkEA7xRcS5+P LMzt9IIsLkccwebgKfZ4PRWLttNcKfo+mYDm1qYF3tPRHbrm1wIrMXcw9si4EHqp cuc3hiMk3rA2ii/x8hmhH4LmH0aC4yZrMDuWHb/UfT6XEwG5Pe7htie17Wmf0XSO CT1Z80+YQ9406oAH9tkdcIp5uwKBgQD5tl9oVXbW+HsgjeTF/IKnHO1ajeGg3+Oy /dc3cKlHtTsZwRZZuz55ZEmPwJeQzp9iY/DsJQfIVd03vfeqCCiGJw+L9wYyzIoe GXsctri+OwSgpbphdfpndDG+De0fWeSisz8a6cVUv0RYyH7MvnnsXOrUP7opEGHj NKkkO+biBwKBgQC/CWqRvz9oyBdvTlC4/bq721flXmU0dRKFZPy2N3V8Fz+uvRpH 2tAV1AnVN+tAUnAcmkorKQYxPBETsmvmfiyetZ5DYrKbtDJhxRIwPBAZJIOWmFLa nyMsqpKSGYEGtv06hefmOVsV0zwSwGHxBoJY+yIugBlnvpvFCaLtTB8g5wKBgHoc ZKtwn5ygBhX1TVpEEOAHlUoi96Lj2UU+PHAv95fJWA1QDs3ycqqKEC7rzzJQ2EAU /0t7EEM3OeZ4TxQmySpRD5kyQyW0QBZX/4wbDlx4H9svL+VY/Ap7F5gI11vtaZDm doWCq6y1m4aPBPK6coTTK0J/p1lNWZDxv4Sohk8hAoGAWatOc1JfobF8/AtCxxxY h13RmzGoOb0dO++1CGvVls9HmcEF35lUIaIC6QjrVLfO4z4tOhJSKGfBvaD6vQPj ySHBJvNZxzkxbeNhmxYzs76SOCjYGvnsJnx2N0U3rRCbJ89JGB+m+dBfOkUq7vt3 csnqECD904R6NGDcxxezzAw= -----END PRIVATE KEY----- *) # This output is not actually just the private key, but all of the parameters # together (N, e, d, etc.). So this is very secret. If you just want the public # key, then you would save this somewhere then use openssl again. I generated a # 4096-bit (2466 digits) key (different than the one above) and got the public # key like this: (* $ openssl rsa -pubout < key.txt writing RSA key -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv3IvoDUCVHV4aCUnVtk4 VRT5aPR2i0H7WrHKkWCphS7PtnziHKfT+/TcbE4gCIlwuhPLB0NIwE8d8If9u03w 06qG1IU5RfYA6mFZpCP2Jf6siVcqldpdvtBoXK2cowigHzHdjKG/xm58cRX10bxY amn3IIij/dZRZbhGKUM+xiz+EBnlwqDhzDqpuCj+v0oJ2h3PY+6qarOG5R9oC4w6 eO1Ylv60OCL/fPTjAprR9fN3Jbpntb4ejqio585yngxkgXVgRJMnvJE4bUlARsdI kJb6mvL+UBk1CesiiLUUXdKsUy+X4Rq4Cvn5GF+n4z239s9bZdPkOUgA1SnKuyp0 95wPj5MScsuXDnxXMmTc5O/YWJpNhv3YdwoFikbdqwHgP1M2bDAAvm0Eu3Y7sM2o fUKlH9gVSBsif8QWMCLQSfP1IxJf7XsAFXIH9ldtDoy3SOQriKhhNfSI5zh7mCxL JUWvBpdEVmuTcGd9jDMEVOJzKFSxM8DmGaADTeMJKyB/SQlOQmdCNNR3ZXRGq7uX OAYjJUdXkDFLaJNCFfMb1sObiWWIoy/JeiN+U/ULSfXQSKPZ/NXzYastb9hM1xHd SJDSn4hzLx5w9nxmsk3DGJwOD5ZKllMQ9DcuNQOssALoG0LxfsSIHfsnthL75aKW RtCdZGonbCEHizFAsj+Aao8CAwEAAQ== -----END PUBLIC KEY----- *) # The parameters are as follows: # e = 65537 (everyone uses this by default) # N = 781031698217883042398890730588167007882753212312082463232625329429118308310700557226161167257864287497112646594083423739642856291713565876625980189273341617453296899265578536263772290719418809181289833873674466243735227170670747623731988888385475296513452691261296092088186595847190487484931619714612529041666895402387685839287384762848588078447029927783219111285572597724398689074360810786955072555913196849206252722952514822675486809906466904331236284216176894185287595913548875533977388179481458323646315143278086824654932577425491784595310574742954469002750038852791885437112141385501497033688351168039005975648776602234669602153777671309634931623194197525489751480366060594189076267130414967739155316040950648115500963210117071811910989047225658621754476375166781416632894855243464523714749416318518825790970384344337623363487021750848634301101882030448509042252397897612215439718705285976714636648986158554927938016438511288092137337703354586413203223814977591982788320753945520522155052965844593510495432059323088820333396387922533145400849774252574298970423764475804862809053455077077794767512417798804364205337309645960443188549312321332618576197481427323910025987316528972695113429854135692596148192594644555765051759291023