内部ペンテスト(基本的には赤いチームの演習)を行っているときに、秘密鍵(正確にはOpenSSLRSAPrivateCrtKey)の次のコンポーネントを見つけました。
これで秘密鍵全体を再構築する方法はありますか?そして、そのキー(再構築された場合)はトラフィックを解読するのに十分でしょうか?
ここでより良いコンテキストを与えるために、これまでに抽出できた値を示します。
モジュラス= e62a3583cb27093288d04f0a329ccec23f4fce25832f9a91633ed845f31c72cc276f538a313a4dd29d71770bafa0a828e931767c8fa7839e966f9222854a800980771f4998a25acfdea4c0fbcef9171827fe813b59a24f44ec0b09e8983ac7150636cff3d527be5554d2e8266d9f4ad3704406c01c4faabb2e3692c2f449da3fff865d99586e9a54bfe602a54566f74eb0841e545e5f76408ee68bd65c086b46bd47ebfffd84d537b47c3b938b1777549294cfa2b08c7b690728af55c194aae743166a237f92ff69c85e931e4c424fe9940d55ac15cfa2830f8cec4de04dc4afa8f2b74454a35f9175970c22830d5de2038e0768abb7ca2c8f746cde79d757e3
publicExponent = 10001
privateExponent = b205bfb29a752cf5fb4033824db75f6c7b0fbd00e2c0f52ab2baaf091b8acb7800a068db204c5a592711d5e422097f4775669ea0a57409a7a5efd1f60566a435b5396de7bcb906c8750ab5818e8ab74425db0215e7b454df983ac985300976665a9216b22012477334d29460f4b51a69041279ae29b7acf46e4023afcac73c9880012ef8ea0c46f80af6e00c6ca3dd051bf8e48a70419bf2097609ef41547f0852a469dcbb360e90e16a8a7cf5b23ebdfde0ca20c69f8346fb2cac8b227168733ea30f7ca07d51b61a9f50b9b911de31676a2e5826c78094f2fd8b73611d02b3b1a9cee7bfe43cf73f8f12c47d1d31e04f7a9acc9fea829053c24f7546342021
primeP = f5da5ef5099cc70460afb65874f0981e4220d79005c3ee07ea7557be612e9890ac28c47bee93d6a556bc8205826daf1bd23c768fe47dc50f65d33b0f7c5328047b51d85dec29b7f4fcb01984966b272f37e3cd5c45cd0e2216f916c9408d0b5d468b60f9231a73c83d70dc455f1360f8a254338305930220b403053f33d24ee9
primeQ = efaa14abb77223209b416f147acec8c1805393d688864cb33c896d84eb2fa2d4859925a1a0a619799c152d2dd5ade93ab2981f784dc735e882dcac298254e1365127a2b64b31311b9cb1324cc1324c3c143c793daveccc1c324c1cbdc324c1cbc1c9c1c9c1c9c9c9cdc9c9c9c9c0c0d0e0c
primeExponentP = 3637eb5b14bc9b734eb3517e5e83b4b86f92f8970d7e711f13c8bf0a003a9b70c456d546138e4cf6f792e905b806e2683b4c14491cc5d3d09a7f23f63d4fc5727f93c428aa6d64e1455cbcb3edcc41befb0f64f9a5771c57ce432e90418919697fa63b4396473e2379d14af28d8e238390a10a1f29fa8aac95a658e0e057d009
primeExponentQ = 750ef3adb39a32021912eab86c0b580efb28d74aafc038f24a9d2d3b00cc7191aff74f64145d4c9013665c7cc8a37b094a75f6d901d44d4655b486fa774812003fbf46401795dd0353432e60329c2b70239075abd460f2228d934c654bc156d9e5b7aaa4bfcb68fce7d031a48653bf2558675893af983668a870b98f1f5bdb25
crtCoefficientを= 354ba87acadf85a7f1178011a03ca25a8c359400d2ca7cffc0391d911342bc2f424268d0e445470b306f0179c780cad52c8a011ebffae5f1269f80ab0b6d68697aa977a0a8992b887477711ecb3caf1176b9ea2c940eff41e2de6c314ca73590275d654025cd56637a0b856152ff31cf7d814d5d6b47676c78b9dc783711214c
OK .. @aedcvの素晴らしい答え/コメントをありがとう。最後に、さまざまな秘密鍵コンポーネントからPEM形式で秘密鍵を再構築するためのpythonコードを理解しました。以下にコードを示します(私の将来の参考のため、および私のような他の人のために:))。
from Crypto.PublicKey import RSA
from base64 import b64decode
# modulus as is from the components obtained
modulus = 'b733eb38bf886b43962bdde4688a8f5638f59a01416e59d543a29d5686d31be1623bcb5aebffa897ce3c702e6275b5ee22b77825d67f321fd90feda390780dc63beb04b4fcdf8b21d7e424d9ef4a319bc910790b36e844dee62582c2bf3ca6b9fbb219083a9d36044f7bf777c90101b8165cdfe6477ac83af9f320b2bfe39f35d6476c1f8c2e8c0dcd790c6d364d21559c75d496a0383952649ec136a48fd1ba41cedd63c5bf8d0138fb1d68c8935754a38e6dff4389dc7f42ea4bc754fab5fa49f2da9efb007a8a81219375e798e43b4fa970e8694557e7bd781e7bde90b38428df92d90c3ed5594d71d95ebb9fd9ce830484319698c736a6dd43242209a8af'
# public exponent as is from the components obtained
publicExponent = '10001'
# private exponent as is from the components obtained
privateExponent = '293675c8eb556e03e34974fe48023ba282e7c540590ed108a7d172219fece7cdb9028889a8a377b2c6c353dd2b6b1d8537ac1c4c2ec7a867ffb59499020befd5536f583cbad233036704bcc1861223bcceeb74bf7017aa3e927983c3f9af54366c87b117e7cfabf2264b55ed4d7b7b7e85115990fd2d82d3b99cd7133f159df320f7c6b4b1510c1dfe043a46d0616355fd3464ba55e923fef0262532f6f6239de21a1eb404597a620995083dc3e8cfbe3b0fcafedf52b69c8954def6abd1391acc34fc10f4f0e3e8e6f4d0a324414ae317135f58133025fb6e802a35b85b417ab25e53b5701475bcc82123756861e7252c3596d06397d4c58f0d83334b4d3ae9'
# primeP as is from the components obtained
primeP = 'e330e4226321ce47f8e81577a9914ad512d9006c0e197f99261c18c474acc218104ee8ca7808943adf9f4cdf9e541c6f2799cb27b77b9751b93ae001ee6e731cb48d293568b88764629d1a0014179ea51b5b49fa2a0a3dcc4852cea8c23bd244773b391a71e63820e809968a188dbd3f3609d62c4ca24df3373873d8bb9096bb'
# primeQ as is from the components obtained
primeQ = 'ce6f13a87e04662296619ff6c56c9c2fc8e5fc3678b53d609d6be7a654319262a9a788226900ab833cb4e0e578691570f0739134aed7e77587dadc6ba1b12dc489fe254d48f8e03e3032f95d91fff0e5200883b31cdd00b89eb4895aa9b60907ec3ee3eec65946f36d8d6d733e7df7f8de641473c995ec2c39275dd72370209d'
# crtCoefficient as is from the components obtained
crtCoefficient = '542a5d9afcf012d6488bab79d38e7c74a1f5ccae51779d4191964c29137b8093bb355208d8358d8e40e8fca254e3e863c2557cae180e976d44f34d692984da2af4c213d42b9dc519376b2bc76790d93fc7c04018806f4cafe2390b30e01fbbab65c143ceb62a0ee1985025a748749117b85fac7b78d51a3830a9d216dea4046'
# converting each of the above from hex to long integers. Why, becasue pyCrypto contruct expects them to be that way
modulus_int = long(modulus,16)
publicExponent_int = long(publicExponent, 16)
privateExponent_int = long(privateExponent, 16)
primeP_int = long(primeP, 16)
primeQ_int = long(primeQ, 16)
crtCoefficient_int = long(crtCoefficient, 16)
private_key = RSA.construct((modulus_int, publicExponent_int, privateExponent_int, primeP_int, primeQ_int))
# encrypted stuff as is from the request response
cipher_text = 'QLOWI4eOKYnjGxwjMccbbepL5Nq8exGiwZQWSK2YiefFIS2+a7uaZn9cZzI0ywq9bfaTjUM/T2dvx7hsf9AgbEPGVbwruZFWpB8vlTxHVO0ynKJHpGE1L3jyuXg81oxzdr1wCetuBBN1tgc1T7JwDSWrq3/x4L4KKJ8VC+Ui0S9hYssH7zWWCYqYzb5bV0sMOYyJMLxP/VT2R/DYfAMIXegsDP/1blK16V4fVdu11zmuSNK8gMKYpnXZ2zD3hUWYu+9nj3g+mI/bTBP77aDdK/sPUjN2qYc7lV3VlAf1bBIhaToddWQwiLbrh2O80ZMdcF+EBkkoHBlT6J7yMyQtvw=='
raw_cipher_data = b64decode(cipher_text)
# decrypt the message directly with the private key
decrypted_data = private_key.decrypt(raw_cipher_data)
print decrypted_data
# export the private key to PEM format
pem_key = private_key.exportKey('PEM')
print pem_key
はい、あなたが実際にすべての正しい値を得たと仮定します。そうする必要があるのは、プライベート指数(d)と係数(n)だけです。
Cを暗号文、mをメッセージとします。これは次のように計算されます:
RSA暗号化システムの秘密鍵が生成される方法は次のとおりです(目的に合わせて簡略化されています)。
これで、公開鍵はペア(e、n)で構成されます。秘密鍵は(d、n)のペアで構成されます。 eは「公開指数」、dは「非公開指数」です。
最初のSSLハンドシェイクをキャプチャした場合にのみ、トラフィックを復号化できます。 SSLは対称暗号を使用してトラフィックを暗号化します。この暗号を使用して暗号化/復号化するための鍵(ハンドシェイク中に交渉)は、RSA鍵を使用して交換されます。選択した暗号は、ハンドシェイクパケットで見つけることができます。
サーバーがDiffie-Hellman鍵交換を使用している場合は、かなり困惑しています。