ElGamal Test Keys[ElGamal Home][Home]
ElGamal is a public key encryption method, and which has a public key (\(P,G,Y\)) and a private key (\(x\)). The following will encrypt a value using ElGamal. RFC 9500 [here] was published in Dec 2023 and defines RSA, DLP (Discrete Logarithm Problem) and ECDLP (Elliptic Curve DLP) keys for testing. With DLP, we have discrete log methods such as the Diffie-Hellman method and ElGamal, and with ECDLP, we have elliptic curve methods, such as for ECDH and ECDSA. In this page, we will use the ElGamal keys and see if they work for the parameters defined.
|
Theory
Initially Bob creates his public key by selecting a \(g\) value and a prime number (\(p\)) and then selecting a private key (\(x\)). He then computes \(Y\) which is:
\(Y=g^x \pmod p\)
His public key is \((Y, g, p)\) and he will send this to Alice. Alice then creates a message (\(M\)) and selects a random value (\(k\)). She then computes \(a\) and \(b\):
\(a=g^k \pmod p\)
\(b=y^k M \pmod p\)
Bob then receives these (\(a\) and \(b\)), and then uses his private key (\(x\)) to decrypt the values and discover the message:
\(M=\frac{b}{a^x} \pmod p\)
This works because:
\(\frac{b}{a^x} \pmod p = \frac{y^k M}{ {(g^k)}^x } \pmod p = \frac{{(g^x)}^k M}{ {(g^k)}^x } \pmod p = = \frac{g^{xk} M} { g^{xk} } \pmod p = M \)
Coding
In finite fields, the operation of \(\frac{1}{x} \pmod p\) is performed as an inverse of \(x\) mod p. The first thing we need is a random number generator for our values of x and k. For this we can generate a prime number with \(n\) bits, but ranges between 0 and p-1. The coding is:
import sys from Crypto.PublicKey import DSA from Crypto.Util.number import * import random import binascii msg="hello" test=1 if (len(sys.argv)>1): msg=sys.argv[1] if (len(sys.argv)>2): test=int(sys.argv[2]) try: M= bytes_to_long(msg.encode('utf-8')) if (test==1): p=0x030CDFC38FC3E4212790B0A41E45B4E4E880DE8ABFD3AECA0B238FB6CD730CC318769336D5B180B2802A01BE4BC1AB84FCE2FF489B50C2D29DE91EC0E65B6064FD0DE537EABA1C6CDD27DC3030481E8BB960AA8B8AEF933530E6B1CC5160BBFAAF850FF6578112337D53034E4163DC6503BDF8892581141FAB8255B6D9727BB3 q=0xEC41B9C0621D5BDCAF11D5198F7208882E65BBDF g=0x016487ACCFCD955051E06E1C5BEF452C1263C75D2B36504FB4275735C283320B63AC91C6F4020932531CAB04B1CD72FDF29DE24E271797A7DD2197676931F9331D1F59EEE5BA2C7D54AE135C7F794137D8D80EB629288E268A3BEBD21F16A403F1D5DAD83C1C478017A3CD266F1BA49B890DC089212E72261DA367AF803B0250 x=0x11ED99785A813A1B0E96ECD38D7F9BCE9EBFD6FA if (test==2): p=0x032DD5537D337A913437D35EA3433DB0E7B721298FBA8727F2F9BE856D6A146B92988D5082F2C572B7703763E82454A7A4A2259B29ACE9B0BC9B4B4D985D6A9C8CB630E4E09F48079F1BE8076971DE92685670B94CC9687DDC233B30AF2294B030A6B497F646F94E1C17E83A904C2C1B684410CE048FD9CD6405A14AA68C2B8F7F8BD06E9F64C4BB69CCBFBC8056AE414A8B2E35D6205CDEFB2A24A379B8A116175095FF57FF6155128686D99B8E1F2444631271F09C334F3722452FE9263FC3349E6F3307A6754FFD89D44327387DFD4018A02AEA6EF4C636A769E7CEB73719197249A841A30BE0C4BE8ECB107F3802DC4583F8E01294D52B621367BD0C1953 q=0x019509B2EDA83B0882731B3FE89C2EF69DB8D83612345D1A66A583B911 g=0xAC5D120E46D2BAD6878847CCE870A69EDCADC86C859C49BAF7ADE41ED9368EC23B6454FB60EADAACC6642A6FDD322B99AB147581B21BEBE06294E3820BC556FA5411B31C373B39A67D518A547713415C67ACEF18BC6BA94C95600CB5BDA83C84AD58E5491D26261ED4E535ADB22E35B06CC2B4C89DA2DC63E29EDA06F013807246558932E9F2DC8B932E6B84B407F571509D06F79430E95D46B2D02614288417999886A67145ED746A0CA8C0444103F503E6BBE74561C3ACD19AE57A8267A1BC3C493083BB16C597A8AC9981FB70458717FB649CA461D470B4B35E3E9864FA1A599BC01E6FE9930A51F579B084017425B8D0A1023FAEDDDC57D1CE56251CDA x=0x6405BCDEB4F768290223CE5DB52A8A30C28ADC7802D9681EDCB434E5 Y=pow(g,x,p) k=random.randint(0,q) a=pow(g,k,p) b=(pow(Y,k,p)*M) % p recovered=(b* pow(pow(a,x,p),-1,p)) %p print("=== DSA Private key ===") print (f"p={hex(p)}\nq={hex(q)}\ng={hex(g)}\nx={hex(x)}") print (f"Y={hex(Y)}") print("\n===Encryption ===") print (f"\nMessage={msg} ({M})") print (f"cipher: a={a}\nb={b}\n") print (f"Decrypt={long_to_bytes(recovered).decode()}") print("\n=== Private Key PEM format ===") dsaKey = DSA.construct((Y,g,p,q,x ) ) pubKeyPEM = dsaKey.exportKey() print(pubKeyPEM.decode('ascii')) print("\n=== Private Key DER format ===") pubKeyDER = dsaKey.export_key(format='DER') print(binascii.hexlify(pubKeyDER).decode()) pub= dsaKey.publickey() print("\n=== Public Key PEM format ===") pubKeyPEM = pub.export_key(format='PEM') print(pubKeyPEM.decode('ascii')) print("\n=== Public Key DER format ===") pubKeyDER = pub.export_key(format='DER') print(binascii.hexlify(pubKeyDER).decode()) print("\n=== Public Key OpenSSH format ===") pubKeyOpen = pub.export_key(format='OpenSSH') print(pubKeyOpen) if (test==1): print("\n=== Importing PEM format ===") key=DSA.import_key("-----BEGIN DSA PRIVATE KEY-----\nMIIBuQIBAAKBgAMM38OPw+QhJ5CwpB5FtOTogN6Kv9Ouygsjj7bNcwzDGHaTNtWx\ngLKAKgG+S8GrhPzi/0ibUMLSnekewOZbYGT9DeU36rocbN0n3DAwSB6LuWCqi4rv\nkzUw5rHMUWC7+q+FD/ZXgRIzfVMDTkFj3GUDvfiJJYEUH6uCVbbZcnuzAhUA7EG5\nwGIdW9yvEdUZj3IIiC5lu98CgYABZIesz82VUFHgbhxb70UsEmPHXSs2UE+0J1c1\nwoMyC2Oskcb0AgkyUxyrBLHNcv3yneJOJxeXp90hl2dpMfkzHR9Z7uW6LH1UrhNc\nf3lBN9jYDrYpKI4mijvr0h8WpAPx1drYPBxHgBejzSZvG6SbiQ3AiSEuciYdo2ev\ngDsCUAKBgAIguULCXETaUrDRdoLqxDbqfoHsn3bhBXUyqmfq3QStuP1hgboLJfKE\n2qqqBfPIQDTUF9N7bgpjMYoKeR8dDdT2ivrjNapdvqPy9tbdcwkmJH/cTRuC34wt\nh66NNq253SUTV46LmapqDt9nX/wv3rZLJuW+2FMt/ZgRD8/J7fk4AhQR7Zl4WoE6\nGw6W7NONf5vOnr/W+g==\n-----END DSA PRIVATE KEY-----") print(f"P={hex(key.p)})") print(f"q={hex(key.q)})") print(f"g={hex(key.g)})") print(f"x={hex(key.x)})") print(f"y={hex(key.y)})") except Exception as e: print(e)
And a sample run:
=== DSA Private key === p=0x30cdfc38fc3e4212790b0a41e45b4e4e880de8abfd3aeca0b238fb6cd730cc318769336d5b180b2802a01be4bc1ab84fce2ff489b50c2d29de91ec0e65b6064fd0de537eaba1c6cdd27dc3030481e8bb960aa8b8aef933530e6b1cc5160bbfaaf850ff6578112337d53034e4163dc6503bdf8892581141fab8255b6d9727bb3 q=0xec41b9c0621d5bdcaf11d5198f7208882e65bbdf g=0x16487accfcd955051e06e1c5bef452c1263c75d2b36504fb4275735c283320b63ac91c6f4020932531cab04b1cd72fdf29de24e271797a7dd2197676931f9331d1f59eee5ba2c7d54ae135c7f794137d8d80eb629288e268a3bebd21f16a403f1d5dad83c1c478017a3cd266f1ba49b890dc089212e72261da367af803b0250 x=0x11ed99785a813a1b0e96ecd38d7f9bce9ebfd6fa Y=0x220b942c25c44da52b0d17682eac436ea7e81ec9f76e1057532aa67eadd04adb8fd6181ba0b25f284daaaaa05f3c84034d417d37b6e0a63318a0a791f1d0dd4f68afae335aa5dbea3f2f6d6dd730926247fdc4d1b82df8c2d87ae8d36adb9dd2513578e8b99aa6a0edf675ffc2fdeb64b26e5bed8532dfd98110fcfc9edf938 ===Encryption === Message=hello (448378203247) cipher: a=1723147942788005149928891986417245867103898666618030858001819030419414041416316701728640439501050253591678403347346139386313080794477000105824901739311032991974604460244040073608680924471044959933581705314895586460523114900915248052993221719631348707537506152744528929209215395798796068448467847960834687059 b=274037767776536842628674969545044620035380691264388164029745972422251046481552450283142428416570729632977437723137937495732600426249147865071116297669694121231618061958242210293909371459610120519839247727191564796349119162783167836027201319131673112765706212428417868126071060287073992069476708907412536426 Decrypt=hello === Private Key PEM format === -----BEGIN PRIVATE KEY----- MIIBSQIBADCCASoGByqGSM44BAEwggEdAoGAAwzfw4/D5CEnkLCkHkW05OiA3oq/ 067KCyOPts1zDMMYdpM21bGAsoAqAb5LwauE/OL/SJtQwtKd6R7A5ltgZP0N5Tfq uhxs3SfcMDBIHou5YKqLiu+TNTDmscxRYLv6r4UP9leBEjN9UwNOQWPcZQO9+Ikl gRQfq4JVttlye7MCFQDsQbnAYh1b3K8R1RmPcgiILmW73wKBgAFkh6zPzZVQUeBu HFvvRSwSY8ddKzZQT7QnVzXCgzILY6yRxvQCCTJTHKsEsc1y/fKd4k4nF5en3SGX Z2kx+TMdH1nu5bosfVSuE1x/eUE32NgOtikojiaKO+vSHxakA/HV2tg8HEeAF6PN Jm8bpJuJDcCJIS5yJh2jZ6+AOwJQBBYCFBHtmXhagTobDpbs041/m86ev9b6 -----END PRIVATE KEY----- === Private Key DER format === 308201490201003082012a06072a8648ce3804013082011d028180030cdfc38fc3e4212790b0a41e45b4e4e880de8abfd3aeca0b238fb6cd730cc318769336d5b180b2802a01be4bc1ab84fce2ff489b50c2d29de91ec0e65b6064fd0de537eaba1c6cdd27dc3030481e8bb960aa8b8aef933530e6b1cc5160bbfaaf850ff6578112337d53034e4163dc6503bdf8892581141fab8255b6d9727bb3021500ec41b9c0621d5bdcaf11d5198f7208882e65bbdf028180016487accfcd955051e06e1c5bef452c1263c75d2b36504fb4275735c283320b63ac91c6f4020932531cab04b1cd72fdf29de24e271797a7dd2197676931f9331d1f59eee5ba2c7d54ae135c7f794137d8d80eb629288e268a3bebd21f16a403f1d5dad83c1c478017a3cd266f1ba49b890dc089212e72261da367af803b02500416021411ed99785a813a1b0e96ecd38d7f9bce9ebfd6fa === Public Key PEM format === -----BEGIN PUBLIC KEY----- MIIBtTCCASoGByqGSM44BAEwggEdAoGAAwzfw4/D5CEnkLCkHkW05OiA3oq/067K CyOPts1zDMMYdpM21bGAsoAqAb5LwauE/OL/SJtQwtKd6R7A5ltgZP0N5Tfquhxs 3SfcMDBIHou5YKqLiu+TNTDmscxRYLv6r4UP9leBEjN9UwNOQWPcZQO9+IklgRQf q4JVttlye7MCFQDsQbnAYh1b3K8R1RmPcgiILmW73wKBgAFkh6zPzZVQUeBuHFvv RSwSY8ddKzZQT7QnVzXCgzILY6yRxvQCCTJTHKsEsc1y/fKd4k4nF5en3SGXZ2kx +TMdH1nu5bosfVSuE1x/eUE32NgOtikojiaKO+vSHxakA/HV2tg8HEeAF6PNJm8b pJuJDcCJIS5yJh2jZ6+AOwJQA4GEAAKBgAIguULCXETaUrDRdoLqxDbqfoHsn3bh BXUyqmfq3QStuP1hgboLJfKE2qqqBfPIQDTUF9N7bgpjMYoKeR8dDdT2ivrjNapd vqPy9tbdcwkmJH/cTRuC34wth66NNq253SUTV46LmapqDt9nX/wv3rZLJuW+2FMt /ZgRD8/J7fk4 -----END PUBLIC KEY----- === Public Key DER format === 308201b53082012a06072a8648ce3804013082011d028180030cdfc38fc3e4212790b0a41e45b4e4e880de8abfd3aeca0b238fb6cd730cc318769336d5b180b2802a01be4bc1ab84fce2ff489b50c2d29de91ec0e65b6064fd0de537eaba1c6cdd27dc3030481e8bb960aa8b8aef933530e6b1cc5160bbfaaf850ff6578112337d53034e4163dc6503bdf8892581141fab8255b6d9727bb3021500ec41b9c0621d5bdcaf11d5198f7208882e65bbdf028180016487accfcd955051e06e1c5bef452c1263c75d2b36504fb4275735c283320b63ac91c6f4020932531cab04b1cd72fdf29de24e271797a7dd2197676931f9331d1f59eee5ba2c7d54ae135c7f794137d8d80eb629288e268a3bebd21f16a403f1d5dad83c1c478017a3cd266f1ba49b890dc089212e72261da367af803b0250038184000281800220b942c25c44da52b0d17682eac436ea7e81ec9f76e1057532aa67eadd04adb8fd6181ba0b25f284daaaaa05f3c84034d417d37b6e0a63318a0a791f1d0dd4f68afae335aa5dbea3f2f6d6dd730926247fdc4d1b82df8c2d87ae8d36adb9dd2513578e8b99aa6a0edf675ffc2fdeb64b26e5bed8532dfd98110fcfc9edf938 === Public Key OpenSSH format === b'ssh-dss AAAAB3NzaC1kc3MAAACAAwzfw4/D5CEnkLCkHkW05OiA3oq/067KCyOPts1zDMMYdpM21bGAsoAqAb5LwauE/OL/SJtQwtKd6R7A5ltgZP0N5Tfquhxs3SfcMDBIHou5YKqLiu+TNTDmscxRYLv6r4UP9leBEjN9UwNOQWPcZQO9+IklgRQfq4JVttlye7MAAAAVAOxBucBiHVvcrxHVGY9yCIguZbvfAAAAgAFkh6zPzZVQUeBuHFvvRSwSY8ddKzZQT7QnVzXCgzILY6yRxvQCCTJTHKsEsc1y/fKd4k4nF5en3SGXZ2kx+TMdH1nu5bosfVSuE1x/eUE32NgOtikojiaKO+vSHxakA/HV2tg8HEeAF6PNJm8bpJuJDcCJIS5yJh2jZ6+AOwJQAAAAgAIguULCXETaUrDRdoLqxDbqfoHsn3bhBXUyqmfq3QStuP1hgboLJfKE2qqqBfPIQDTUF9N7bgpjMYoKeR8dDdT2ivrjNapdvqPy9tbdcwkmJH/cTRuC34wth66NNq253SUTV46LmapqDt9nX/wv3rZLJuW+2FMt/ZgRD8/J7fk4' === Importing PEM format === P=0x30cdfc38fc3e4212790b0a41e45b4e4e880de8abfd3aeca0b238fb6cd730cc318769336d5b180b2802a01be4bc1ab84fce2ff489b50c2d29de91ec0e65b6064fd0de537eaba1c6cdd27dc3030481e8bb960aa8b8aef933530e6b1cc5160bbfaaf850ff6578112337d53034e4163dc6503bdf8892581141fab8255b6d9727bb3) q=0xec41b9c0621d5bdcaf11d5198f7208882e65bbdf) g=0x16487accfcd955051e06e1c5bef452c1263c75d2b36504fb4275735c283320b63ac91c6f4020932531cab04b1cd72fdf29de24e271797a7dd2197676931f9331d1f59eee5ba2c7d54ae135c7f794137d8d80eb629288e268a3bebd21f16a403f1d5dad83c1c478017a3cd266f1ba49b890dc089212e72261da367af803b0250) x=0x11ed99785a813a1b0e96ecd38d7f9bce9ebfd6fa) y=0x220b942c25c44da52b0d17682eac436ea7e81ec9f76e1057532aa67eadd04adb8fd6181ba0b25f284daaaaa05f3c84034d417d37b6e0a63318a0a791f1d0dd4f68afae335aa5dbea3f2f6d6dd730926247fdc4d1b82df8c2d87ae8d36adb9dd2513578e8b99aa6a0edf675ffc2fdeb64b26e5bed8532dfd98110fcfc9edf938)
And for 2,048 bit:
... === DSA Private key === p=0x32dd5537d337a913437d35ea3433db0e7b721298fba8727f2f9be856d6a146b92988d5082f2c572b7703763e82454a7a4a2259b29ace9b0bc9b4b4d985d6a9c8cb630e4e09f48079f1be8076971de92685670b94cc9687ddc233b30af2294b030a6b497f646f94e1c17e83a904c2c1b684410ce048fd9cd6405a14aa68c2b8f7f8bd06e9f64c4bb69ccbfbc8056ae414a8b2e35d6205cdefb2a24a379b8a116175095ff57ff6155128686d99b8e1f2444631271f09c334f3722452fe9263fc3349e6f3307a6754ffd89d44327387dfd4018a02aea6ef4c636a769e7ceb73719197249a841a30be0c4be8ecb107f3802dc4583f8e01294d52b621367bd0c1953 q=0x19509b2eda83b0882731b3fe89c2ef69db8d83612345d1a66a583b911 g=0xac5d120e46d2bad6878847cce870a69edcadc86c859c49baf7ade41ed9368ec23b6454fb60eadaacc6642a6fdd322b99ab147581b21bebe06294e3820bc556fa5411b31c373b39a67d518a547713415c67acef18bc6ba94c95600cb5bda83c84ad58e5491d26261ed4e535adb22e35b06cc2b4c89da2dc63e29eda06f013807246558932e9f2dc8b932e6b84b407f571509d06f79430e95d46b2d02614288417999886a67145ed746a0ca8c0444103f503e6bbe74561c3acd19ae57a8267a1bc3c493083bb16c597a8ac9981fb70458717fb649ca461d470b4b35e3e9864fa1a599bc01e6fe9930a51f579b084017425b8d0a1023faedddc57d1ce56251cda x=0x6405bcdeb4f768290223ce5db52a8a30c28adc7802d9681edcb434e5 Y=0x23037b2d9c99e753fd279bffcdee9929c9ba1deaa970b0372af7335e55021374299f361027c8d65d57afb4d3ccd2b4724b53f09ebe28cbf499f6b4f863349198b24b2ab0d4cecb6c4fd7e672d4b2aca9d39e3ae20f8ecd7fd77107ce54a66ddee9744e48cf8dd6ba9a528c751f008c66f192a204ec7f93876910179b1311d975b4925c5699029fbd114a5e790190a4d389b948f8f576a8e45a56be0d4fd6cea631c5f537ef918598e30522f9364506618c04584ca6fd075121221a460f980c54f801d7d6d219df2a1dbea3c8a03a09f6be91bb6296d791a2a8380e89d0cdd26f7663e069a833149ad442b2c13988771f654b81f50e0d7264247d678eaebb0f9 ===Encryption === Message=hello (448378203247) cipher: a=96051779959635582663410985535244212631290271671136030936004233288363832300029631287317276704360561265917006138342666376737530272076247476732872874697628817554372612359429285244127691393894464230238883061871698930060606861905183602282305129509575645604020046682902173106937530127358300691550531890487053622722012979445824853290130890685867073628168813608239785923847514205888494404783697830177453599888071374929487813560390118394203951243746731236585365330094471326854010612452394555351357668039161239374957247624122938021943322230769553241106208229640856134473490811748676398494755215958245506175708653539521702573 b=309927599806696261316205371250292638248055122145553414209871041044033272723552195439913703323710555677311694495555078887639922234568445663814692533823069541536325872196847239010625330615934781631263768211859143801666294387264011665436966728055099939347056835123194068722814379468352304774524149074597209769166928122490103864501336407753665995454813578183178250443441853426642015405472828466069720763673146783140127537935028311100075130855474574126280241534598570204864298304536314235095775057825355677689953542929827236414617333014874508028906516249735833013428187701467805323952902776100843678585189887040392802650 Decrypt=hello === Private Key PEM format === -----BEGIN PRIVATE KEY----- MIICWwIBADCCAjQGByqGSM44BAEwggInAoIBAAMt1VN9M3qRNDfTXqNDPbDntyEp j7qHJ/L5voVtahRrkpiNUILyxXK3cDdj6CRUp6SiJZsprOmwvJtLTZhdapyMtjDk 4J9IB58b6Adpcd6SaFZwuUzJaH3cIzswryKUsDCmtJf2RvlOHBfoOpBMLBtoRBDO BI/ZzWQFoUqmjCuPf4vQbp9kxLtpzL+8gFauQUqLLjXWIFze+yoko3m4oRYXUJX/ V/9hVRKGhtmbjh8kRGMScfCcM083IkUv6SY/wzSebzMHpnVP/YnUQyc4ff1AGKAq 6m70xjanaefOtzcZGXJJqEGjC+DEvo7LEH84AtxFg/jgEpTVK2ITZ70MGVMCHQGV CbLtqDsIgnMbP+icLvaduNg2EjRdGmalg7kRAoIBAACsXRIORtK61oeIR8zocKae 3K3IbIWcSbr3reQe2TaOwjtkVPtg6tqsxmQqb90yK5mrFHWBshvr4GKU44ILxVb6 VBGzHDc7OaZ9UYpUdxNBXGes7xi8a6lMlWAMtb2oPIStWOVJHSYmHtTlNa2yLjWw bMK0yJ2i3GPintoG8BOAckZViTLp8tyLky5rhLQH9XFQnQb3lDDpXUay0CYUKIQX mZiGpnFF7XRqDKjAREED9QPmu+dFYcOs0ZrleoJnobw8STCDuxbFl6ismYH7cEWH F/tknKRh1HC0s14+mGT6GlmbwB5v6ZMKUfV5sIQBdCW40KECP67d3FfRzlYlHNoE HgIcZAW83rT3aCkCI85dtSqKMMKK3HgC2Wge3LQ05Q== -----END PRIVATE KEY----- === Private Key DER format === 3082025b0201003082023406072a8648ce3804013082022702820100032dd5537d337a913437d35ea3433db0e7b721298fba8727f2f9be856d6a146b92988d5082f2c572b7703763e82454a7a4a2259b29ace9b0bc9b4b4d985d6a9c8cb630e4e09f48079f1be8076971de92685670b94cc9687ddc233b30af2294b030a6b497f646f94e1c17e83a904c2c1b684410ce048fd9cd6405a14aa68c2b8f7f8bd06e9f64c4bb69ccbfbc8056ae414a8b2e35d6205cdefb2a24a379b8a116175095ff57ff6155128686d99b8e1f2444631271f09c334f3722452fe9263fc3349e6f3307a6754ffd89d44327387dfd4018a02aea6ef4c636a769e7ceb73719197249a841a30be0c4be8ecb107f3802dc4583f8e01294d52b621367bd0c1953021d019509b2eda83b0882731b3fe89c2ef69db8d83612345d1a66a583b9110282010000ac5d120e46d2bad6878847cce870a69edcadc86c859c49baf7ade41ed9368ec23b6454fb60eadaacc6642a6fdd322b99ab147581b21bebe06294e3820bc556fa5411b31c373b39a67d518a547713415c67acef18bc6ba94c95600cb5bda83c84ad58e5491d26261ed4e535adb22e35b06cc2b4c89da2dc63e29eda06f013807246558932e9f2dc8b932e6b84b407f571509d06f79430e95d46b2d02614288417999886a67145ed746a0ca8c0444103f503e6bbe74561c3acd19ae57a8267a1bc3c493083bb16c597a8ac9981fb70458717fb649ca461d470b4b35e3e9864fa1a599bc01e6fe9930a51f579b084017425b8d0a1023faedddc57d1ce56251cda041e021c6405bcdeb4f768290223ce5db52a8a30c28adc7802d9681edcb434e5 === Public Key PEM format === -----BEGIN PUBLIC KEY----- MIIDQTCCAjQGByqGSM44BAEwggInAoIBAAMt1VN9M3qRNDfTXqNDPbDntyEpj7qH J/L5voVtahRrkpiNUILyxXK3cDdj6CRUp6SiJZsprOmwvJtLTZhdapyMtjDk4J9I B58b6Adpcd6SaFZwuUzJaH3cIzswryKUsDCmtJf2RvlOHBfoOpBMLBtoRBDOBI/Z zWQFoUqmjCuPf4vQbp9kxLtpzL+8gFauQUqLLjXWIFze+yoko3m4oRYXUJX/V/9h VRKGhtmbjh8kRGMScfCcM083IkUv6SY/wzSebzMHpnVP/YnUQyc4ff1AGKAq6m70 xjanaefOtzcZGXJJqEGjC+DEvo7LEH84AtxFg/jgEpTVK2ITZ70MGVMCHQGVCbLt qDsIgnMbP+icLvaduNg2EjRdGmalg7kRAoIBAACsXRIORtK61oeIR8zocKae3K3I bIWcSbr3reQe2TaOwjtkVPtg6tqsxmQqb90yK5mrFHWBshvr4GKU44ILxVb6VBGz HDc7OaZ9UYpUdxNBXGes7xi8a6lMlWAMtb2oPIStWOVJHSYmHtTlNa2yLjWwbMK0 yJ2i3GPintoG8BOAckZViTLp8tyLky5rhLQH9XFQnQb3lDDpXUay0CYUKIQXmZiG pnFF7XRqDKjAREED9QPmu+dFYcOs0ZrleoJnobw8STCDuxbFl6ismYH7cEWHF/tk nKRh1HC0s14+mGT6GlmbwB5v6ZMKUfV5sIQBdCW40KECP67d3FfRzlYlHNoDggEF AAKCAQACMDey2cmedT/Seb/83umSnJuh3qqXCwNyr3M15VAhN0KZ82ECfI1l1Xr7 TTzNK0cktT8J6+KMv0mfa0+GM0kZiySyqw1M7LbE/X5nLUsqyp05464g+OzX/XcQ fOVKZt3ul0TkjPjda6mlKMdR8AjGbxkqIE7H+Th2kQF5sTEdl1tJJcVpkCn70RSl 55AZCk04m5SPj1dqjkWla+DU/WzqYxxfU375GFmOMFIvk2RQZhjARYTKb9B1EhIh pGD5gMVPgB19bSGd8qHb6jyKA6Cfa+kbtilteRoqg4DonQzdJvdmPgaagzFJrUQr LBOYh3H2VLgfUODXJkJH1njq67D5 -----END PUBLIC KEY----- === Public Key DER format === 308203413082023406072a8648ce3804013082022702820100032dd5537d337a913437d35ea3433db0e7b721298fba8727f2f9be856d6a146b92988d5082f2c572b7703763e82454a7a4a2259b29ace9b0bc9b4b4d985d6a9c8cb630e4e09f48079f1be8076971de92685670b94cc9687ddc233b30af2294b030a6b497f646f94e1c17e83a904c2c1b684410ce048fd9cd6405a14aa68c2b8f7f8bd06e9f64c4bb69ccbfbc8056ae414a8b2e35d6205cdefb2a24a379b8a116175095ff57ff6155128686d99b8e1f2444631271f09c334f3722452fe9263fc3349e6f3307a6754ffd89d44327387dfd4018a02aea6ef4c636a769e7ceb73719197249a841a30be0c4be8ecb107f3802dc4583f8e01294d52b621367bd0c1953021d019509b2eda83b0882731b3fe89c2ef69db8d83612345d1a66a583b9110282010000ac5d120e46d2bad6878847cce870a69edcadc86c859c49baf7ade41ed9368ec23b6454fb60eadaacc6642a6fdd322b99ab147581b21bebe06294e3820bc556fa5411b31c373b39a67d518a547713415c67acef18bc6ba94c95600cb5bda83c84ad58e5491d26261ed4e535adb22e35b06cc2b4c89da2dc63e29eda06f013807246558932e9f2dc8b932e6b84b407f571509d06f79430e95d46b2d02614288417999886a67145ed746a0ca8c0444103f503e6bbe74561c3acd19ae57a8267a1bc3c493083bb16c597a8ac9981fb70458717fb649ca461d470b4b35e3e9864fa1a599bc01e6fe9930a51f579b084017425b8d0a1023faedddc57d1ce56251cda038201050002820100023037b2d9c99e753fd279bffcdee9929c9ba1deaa970b0372af7335e55021374299f361027c8d65d57afb4d3ccd2b4724b53f09ebe28cbf499f6b4f863349198b24b2ab0d4cecb6c4fd7e672d4b2aca9d39e3ae20f8ecd7fd77107ce54a66ddee9744e48cf8dd6ba9a528c751f008c66f192a204ec7f93876910179b1311d975b4925c5699029fbd114a5e790190a4d389b948f8f576a8e45a56be0d4fd6cea631c5f537ef918598e30522f9364506618c04584ca6fd075121221a460f980c54f801d7d6d219df2a1dbea3c8a03a09f6be91bb6296d791a2a8380e89d0cdd26f7663e069a833149ad442b2c13988771f654b81f50e0d7264247d678eaebb0f9 === Public Key OpenSSH format === ssh-dss AAAAB3NzaC1kc3MAAAEAAy3VU30zepE0N9Neo0M9sOe3ISmPuocn8vm+hW1qFGuSmI1QgvLFcrdwN2PoJFSnpKIlmyms6bC8m0tNmF1qnIy2MOTgn0gHnxvoB2lx3pJoVnC5TMlofdwjOzCvIpSwMKa0l/ZG+U4cF+g6kEwsG2hEEM4Ej9nNZAWhSqaMK49/i9Bun2TEu2nMv7yAVq5BSosuNdYgXN77KiSjebihFhdQlf9X/2FVEoaG2ZuOHyREYxJx8JwzTzciRS/pJj/DNJ5vMwemdU/9idRDJzh9/UAYoCrqbvTGNqdp5863NxkZckmoQaML4MS+jssQfzgC3EWD+OASlNUrYhNnvQwZUwAAAB0BlQmy7ag7CIJzGz/onC72nbjYNhI0XRpmpYO5EQAAAQAArF0SDkbSutaHiEfM6HCmntytyGyFnEm6963kHtk2jsI7ZFT7YOrarMZkKm/dMiuZqxR1gbIb6+BilOOCC8VW+lQRsxw3OzmmfVGKVHcTQVxnrO8YvGupTJVgDLW9qDyErVjlSR0mJh7U5TWtsi41sGzCtMidotxj4p7aBvATgHJGVYky6fLci5Mua4S0B/VxUJ0G95Qw6V1GstAmFCiEF5mYhqZxRe10agyowERBA/UD5rvnRWHDrNGa5XqCZ6G8PEkwg7sWxZeorJmB+3BFhxf7ZJykYdRwtLNePphk+hpZm8Aeb+mTClH1ebCEAXQluNChAj+u3dxX0c5WJRzaAAABAAIwN7LZyZ51P9J5v/ze6ZKcm6HeqpcLA3KvczXlUCE3QpnzYQJ8jWXVevtNPM0rRyS1Pwnr4oy/SZ9rT4YzSRmLJLKrDUzstsT9fmctSyrKnTnjriD47Nf9dxB85Upm3e6XROSM+N1rqaUox1HwCMZvGSogTsf5OHaRAXmxMR2XW0klxWmQKfvRFKXnkBkKTTiblI+PV2qORaVr4NT9bOpjHF9TfvkYWY4wUi+TZFBmGMBFhMpv0HUSEiGkYPmAxU+AHX1tIZ3yodvqPIoDoJ9r6Ru2KW15GiqDgOidDN0m92Y+BpqDMUmtRCssE5iHcfZUuB9Q4NcmQkfWeOrrsPk=