Aws-cli: awskms埩号化InvalidCiphertextException゚ラヌ

䜜成日 2014幎12月05日  Â·  27コメント  Â·  ゜ヌス: aws/aws-cli

今日、awscliのバヌゞョン1.6.6にアップグレヌドしたしたが、awskms埩号化が埩号化に倱敗し始めたした。 1.6.5で動䜜したす。

$> aws --version
aws-cli/1.6.6 Python/2.7.6 Darwin/13.4.0

$> python -V
Python 2.7.6

$> aws kms encrypt --key-id REDACTED --plaintext foo 
{
    "KeyId": "arn:aws:kms:us-east-1:REDACTED:key/REDACTED", 
    "CiphertextBlob": "CiDdiD7jljnCzXlfZUp27Y4LDY+QJa2Zqcw/7+ihfBDo7hKKAQEBAgB43Yg+45Y5ws15X2VKdu2OCw2PkCWtmanMP+/ooXwQ6O4AAABhMF8GCSqGSIb3DQEHBqBSMFACAQAwSwYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAwVt2CzbGDR2nUwszQCARCAHgdJ4aHQ4i7TMzBN6XlKcC73oilECgep+basamtnXQ=="
}

$> aws kms decrypt --ciphertext-blob CiDdiD7jljnCzXlfZUp27Y4LDY+QJa2Zqcw/7+ihfBDo7hKKAQEBAgB43Yg+45Y5ws15X2VKdu2OCw2PkCWtmanMP+/ooXwQ6O4AAABhMF8GCSqGSIb3DQEHBqBSMFACAQAwSwYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAwVt2CzbGDR2nUwszQCARCAHgdJ4aHQ4i7TMzBN6XlKcC73oilECgep+basamtnXQ==

A client error (InvalidCiphertextException) occurred when calling the Decrypt operation: None

$> pip freeze                                       
Babel==1.3
Fabric==1.10.0
Jinja2==2.7.3
MarkupSafe==0.23
Pillow==2.6.1
PyChef==0.2.3
PyYAML==3.11
Pygments==2.0.1
Sphinx==1.2.3
argparse==1.2.1
astroid==1.2.1
awscli==1.6.6
bcdoc==0.12.2
binaryornot==0.3.0
boto==2.34.0
botocore==0.77.0
box.py==1.2.8
cffi==0.8.6
cliff==1.8.0
cmd2==0.6.7
colorama==0.2.5
cookiecutter==0.8.0
coverage==3.7.1
cryptography==0.6.1
decorator==3.4.0
docutils==0.12
dogapi==1.8.5
ecdsa==0.11
futures==2.2.0
httplib2==0.9
httpretty==0.8.3
iso8601==0.1.10
jmespath==0.5.0
jsonpatch==1.9
jsonpointer==1.5
jsonschema==2.4.0
kazoo==2.0
keyring==4.0
logilab-common==0.63.0
lxml==3.4.0
mock==1.0.1
mockito==0.5.2
netaddr==0.7.12
nose==1.3.4
numpy==1.9.1
oath==1.2
oslo.config==1.4.0
oslo.i18n==1.0.0
oslo.serialization==1.0.0
oslo.utils==1.0.0
paramiko==1.15.1
pbr==0.10.0
prettytable==0.7.2
pyOpenSSL==0.14
pyasn1==0.1.7
pycparser==2.10
pycrypto==2.6.1
pylint==1.3.1
pyparsing==2.0.3
python-ceilometerclient==1.0.12
python-cinderclient==1.1.1
python-dateutil==2.3
python-glanceclient==0.14.2
python-heatclient==0.2.12
python-keystoneclient==0.11.2
python-neutronclient==2.3.9
python-novaclient==2.20.0
python-openstackclient==0.4.1
python-swiftclient==2.3.1
python-troveclient==1.0.7
pytz==2014.9
qrcode==5.1
requests==2.4.3
rsa==3.1.2
scipy==0.14.0
simplejson==3.6.5
six==1.8.0
stevedore==1.1.0
urllib3==1.9.1
virtualenv==1.11.6
warlock==1.1.0
wsgiref==0.1.2

最も参考になるコメント

埌でこれに来る人のために、暗号文をファむルに保存せずにこれを行うために、あなたはするこずができたす

aws kms decrypt --ciphertext-blob fileb://<(echo 'ciphertext' | base64 -d)

泚以䞋の@hauntingEchoで指摘されお<(cmd)はPOSIXに準拠しおいないため、 shを䜿甚しおいる堎合は機胜したせんが、 bashずzsh正垞に機胜したす。

党おのコメント27件

䜕が起こっおいるかに぀いおのほんの少しの背景情報

1.6.6では、以前に゚ンコヌドしおいた「blob」タむプをbase64で゚ンコヌドしおいなかったリグレッションを修正したした。 その結果、「blob」タむプずしおマヌクされたパラメヌタに生のバむナリバむトを指定する必芁があり、内郚的には自動的にbase64で゚ンコヌドされたす。 これは、キヌ暗号化をラりンドトリップするには、最初にbase64をデコヌドする必芁があるこずを意味したす。

$ aws kms encrypt --key-id <key-id> --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file
$ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)"
Decrypted: abcd

この䟋では、バむナリコンテンツを含むファむルであるため、 fileb://プレフィックスも䜿甚しおいたす。

行動はそのたたにしおおくべきだず思いたす。 この最初の問題の動䜜は、1.6.6で修正された1.6.5のリグレッションに䟝存しおいたため、既存の動䜜を倉曎するこずはできたせん。これは、お客様にずっお重倧な倉曎ずなるためです。 䞊蚘のスニペットの䟋は、AWS CLIでバむナリ入力/出力を凊理するための予想される方法であり、この最近のリグレッションを陀いお、この動䜜が垞に行われおいる方法です。

曎新しおいただきありがずうございたす

実際、問題1001ず同様の゚ラヌが発生しおいたす。

$> aws kms encrypt --key-id $KMS_KEY_ID --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file

$> echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)"

'ascii' codec can't decode byte 0xdd in position 2: ordinal not in range(128)
Decrypted: 

@mtougeron䜿甚しおいるAWSCLIのバヌゞョンは䜕ですか AWS CLIの最新バヌゞョン1.6.8で再詊行したしたが、この問題は発生しおいたせん。

~ $ aws kms encrypt --key-id $AWS_KEY_ID --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file
~ $ hexdump -C /tmp/encrypted-file
00000000  0a 20 e1 68 92 dc 42 40  fe 07 80 ca f6 54 1c 68  |. [email protected]|
00000010  e2 45 80 bb c3 e0 2a 2f  91 50 7c ac c3 02 9b c9  |.E....*/.P|.....|
00000020  a8 b3 12 8b 01 01 01 02  00 78 e1 68 92 dc 42 40  |.........x.h..B@|
00000030  fe 07 80 ca f6 54 1c 68  e2 45 80 bb c3 e0 2a 2f  |.....T.h.E....*/|
00000040  91 50 7c ac c3 02 9b c9  a8 b3 00 00 00 62 30 60  |.P|..........b0`|
00000050  06 09 2a 86 48 86 f7 0d  01 07 06 a0 53 30 51 02  |..*.H.......S0Q.|
00000060  01 00 30 4c 06 09 2a 86  48 86 f7 0d 01 07 01 30  |..0L..*.H......0|
00000070  1e 06 09 60 86 48 01 65  03 04 01 2e 30 11 04 0c  |...`.H.e....0...|
00000080  41 de f2 2a a6 c5 38 ef  8a 52 54 92 02 01 10 80  |A..*..8..RT.....|
00000090  1f 2e 01 90 65 7a 21 8c  dd 05 e4 4d 09 64 85 c4  |....ez!....M.d..|
000000a0  33 e3 3d e9 ce 33 6b e9  00 93 ec e5 54 33 8b 3b  |3.=..3k.....T3.;|
000000b0
~ $ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)"
Decrypted: abcd
~ $ aws --version
aws-cli/1.6.8 Python/2.7.7 Darwin/13.4.0

@ jamesls1.6.8で動䜜するようになりたした。 ありがずう

@jamesls個人的には、これは非垞に悪いUIだず思いたす。 暗号化から取埗したものず同じ暗号文を埩号化に枡すこずができたせんか 既存の顧客を壊したくないために倉曎できない堎合は、少なくずもより良い゚ラヌメッセヌゞを提䟛しおください。

A client error (InvalidCiphertextException) occurred when calling the Decrypt operation: None

問題を解決するために䜕をすべきかをリモヌトで教えおくれたせん。 暗号がおそらくBase64であるこずを怜出し、より適切な゚ラヌを出力しお、URLなどを指すこずができたす。

たたは、「最初にbase64からこれをデコヌドする」ずいう远加のフラグをdecryptに枡しおみたせんか

埌でこれに来る人のために、暗号文をファむルに保存せずにこれを行うために、あなたはするこずができたす

aws kms decrypt --ciphertext-blob fileb://<(echo 'ciphertext' | base64 -d)

泚以䞋の@hauntingEchoで指摘されお<(cmd)はPOSIXに準拠しおいないため、 shを䜿甚しおいる堎合は機胜したせんが、 bashずzsh正垞に機胜したす。

Re @thegranddesignのコメント、OS Xでは、少なくずもbase64は倧文字の「D」を䜿甚する必芁がありたした。 䟋えば

$ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb://<(echo $ENCRYPTED_DATA | base64 -D) --query Plaintext --output text | base64 -D)"

Decrypted: Hello world!

 Decrypted行の前に改行を取埗する理由はわかりたせんが、倧したこずではありたせん。

これは私のために働いた

#encrypt the password: TestReadWrite text in the test.txt file
aws kms encrypt --key-id cfc7acf7-4f20-49c3-aa11-8be4cdc3291d --plaintext fileb://test.txt --output text | base64 --decode > out.txt

#decrypt the password: TestReadWrite
aws kms decrypt  --ciphertext-blob fileb://out.txt --output text --query Plaintext | base64 --decode

私も同様の問題を抱えおいたしたが、ノヌドは次のこずを助けたした。

'use strict';

const KMS = require('aws-sdk').KMS;
const fs = require('fs');

const kms = new KMS({
  apiVersion: '2014-11-01',
  // region: 'eu-west-1'
});

function encrypt(params) {
  return kms.encrypt(params).promise();
}

const arn = 'arn:aws:kms:xxx';

encrypt({
  KeyId: arn,
  Plaintext: fs.readFileSync('/path/to/key.pem')
})
.then(data => fs.writeFileSync('/path/to/key.json', JSON.stringify(data)));

@thegranddesignの゜リュヌションに関する別の泚意- <(cmd)はbashismであり、POSIXに準拠しおいないため、bashがオプションでない堎合は、別の゜リュヌションを䜿甚する必芁がありたす。

これは気が遠くなるほど銬鹿げたバグであり、実際に修正されるたではただ開いおいるはずです。 1぀の圢匏を出力に䜿甚し、完党に異なる互換性のない圢匏を入力に䜿甚する察称操䜜を実行するツヌルを構築するこずは、巚倧なアンチパタヌンです。 入力ずしお自身の出力を消費できない察称ツヌルは壊れおいたす。 それが実際に意図したずおりに機胜しおいるかどうかは関係ありたせんが、ただ壊れおいたす。 ツヌルは、生のバむナリ入力に䟝存しおいる堎合、デフォルトで生のバむナリ出力を生成する必芁がありたす。そうでない堎合は、明瀺的なbase64デコヌド手順や特別なパラメヌタを指定せずに、生成されたbase64゚ンコヌド入力を消費できるはずです。その出力を生成するためにも必芁ですたたは、同じ正確なパラメヌタヌを䜿甚しない堎合はアンチパラメヌタヌ。 これらのbase64゚ンコヌディングのいずれかを指定せずに、aws kmsencryptを䜿甚しおbase64゚ンコヌド暗号化ペむロヌドのbase64゚ンコヌド出力を生成できるのはばかげたこずではありたせんが、取埗するには、暗号化デヌタず埩号化デヌタの䞡方を明瀺的にbase64デコヌドする必芁がありたす最初に提䟛したフォヌムに戻りたす。 そのためには、暗号化および埩号化サブコマンドのレベルでも文曞化されおいないコマンドラむンパラメヌタを䜿甚する必芁があるため、理解がはるかに困難になりたす。 ナヌザヌは、暗号化/埩号化クラむアントで誰かがやりたいず思うかもしれない最も明癜なこずを1぀実行する方法を理解しようずしお時間を無駄にするこずがほずんど保蚌されおいたす-コマンドラむンパラメヌタで指定された文字列を暗号化しおから埩号化したす-そしお完党にツヌルのため2぀のサブコマンドが察称であるず想定されおいるにもかかわらず、出力が入力ず互換性がない動䜜モヌドが壊れおいたす。 修正せずにこれを閉じるず、䜿いやすさや開発者の効率に぀いおたったく心配する必芁がないこずがわかりたす。

これを解決する別の方法 @thegranddesignが数幎前に述べたような新しいフラグずは察照的には、 /が有効なbase64文字ではなく、jsonでバむナリデヌタを指定する有効な方法がないこずです。 したがっお

  • ciphertext-blobパラメヌタヌが有効なbase-64の堎合は、base64ずしお枡したす
  • ciphertext-blobパラメヌタヌに/が含たれおいる堎合は、パスずしお解析したす。 fileb://が珟圚の動䜜を実行しおいる堎合、 file://はb64で゚ンコヌドできたす。

ただし、@ sgendler-stemに同意したした。このチケットは、KMSを䜿甚する私が取り組んだすべおのプロゞェクトにリンクされおいたす。これは、参加しようずする人にずっおは垞に問題になるためです。

これは気が遠くなるほど銬鹿げたバグであり、実際に修正されるたではただ開いおいるはずです。 1぀の圢匏を出力に䜿甚し、完党に異なる互換性のない圢匏を入力に䜿甚する察称操䜜を実行するツヌルを構築するこずは、巚倧なアンチパタヌンです。 入力ずしお自身の出力を消費できない察称ツヌルは壊れおいたす。 それが実際に意図したずおりに機胜しおいるかどうかは関係ありたせんが、ただ壊れおいたす。 ツヌルは、生のバむナリ入力に䟝存しおいる堎合、デフォルトで生のバむナリ出力を生成する必芁がありたす。そうでない堎合は、明瀺的なbase64デコヌド手順や特別なパラメヌタを指定せずに、生成されたbase64゚ンコヌド入力を消費できるはずです。その出力を生成するためにも必芁ですたたは、同じ正確なパラメヌタヌを䜿甚しない堎合はアンチパラメヌタヌ。 これらのbase64゚ンコヌディングのいずれかを指定せずに、aws kmsencryptを䜿甚しおbase64゚ンコヌド暗号化ペむロヌドのbase64゚ンコヌド出力を生成できるのはばかげたこずではありたせんが、取埗するには、暗号化デヌタず埩号化デヌタの䞡方を明瀺的にbase64デコヌドする必芁がありたす最初に提䟛したフォヌムに戻りたす。 そのためには、暗号化および埩号化サブコマンドのレベルでも文曞化されおいないコマンドラむンパラメヌタを䜿甚する必芁があるため、理解がはるかに困難になりたす。 ナヌザヌは、暗号化/埩号化クラむアントで誰かがやりたいず思うかもしれない最も明癜なこずを1぀実行する方法を理解しようずしお時間を無駄にするこずがほずんど保蚌されおいたす-コマンドラむンパラメヌタで指定された文字列を暗号化しおから埩号化したす-そしお完党にツヌルのため2぀のサブコマンドが察称であるず想定されおいるにもかかわらず、出力が入力ず互換性がない動䜜モヌドが壊れおいたす。 修正せずにこれを閉じるず、䜿いやすさや開発者の効率に぀いおたったく心配する必芁がないこずがわかりたす。

@ sgendler-stemに完党に同意する必芁がありたす-コヌドが出力を生成する堎合、少なくずもそれを入力ずしお受け取るこずができるはずです。

ただし、それだけではありたせん。 暗号化がSDKを介しお行われる堎合、暗号化されたファむルの最埌に奇劙なarnを远加するず、 base64以倖のarn削陀した埌でも、CLIはそれを埩号化できたせん。 url。 これは壊れおいたす。

再び同意した。 これは物事を䞍必芁に苛立たせたした。

これは実際に閉じおいたすか どうしお これがオヌプンしおから4幎になるずは信じられたせん。フィヌドバックは「意図したずおりに機胜する」ずいう人だけのようです。 いいえ、それはク゜ではありたせん。 @ sgendler-stemは的を射おいたすが、これは完党に壊れおいたす。 責任のあるチヌムが自分自身に぀いお気分が悪いこずを願っおいたす。

同じ䟋倖に盎面したす
botocore.errorfactory.InvalidCiphertextException埩号化操䜜の呌び出し䞭に゚ラヌが発生したしたInvalidCiphertextException

䞭叀
キヌ= b64decodekey
response = client.decrypt
CiphertextBlob = key


encrypt 、 generate-data-keyなどの出力がフィヌルドCiphertextBlob呌び出さなかった堎合、これはそれほどむラむラしないず思いたす。 入力するずdecryptずも呌ばれる--ciphertext-blob 、この暗号文ブロブが異なっお笊号化する必芁があるこずを培底的に盎感的です。

decryptのフラグの名前が異なる堎合は、゚ンコヌディングが異なるこずを瀺唆しおいたす。

ここで埩号化するbase64゚ンコヌド入力の機胜提案がありたすhttps://github.com/aws/aws-cli/issues/2063

@ojitha

埩号化䞭にkey-idをパラメヌタヌずしお枡さないため、kmsは埩号化に䜿甚する暗号化キヌをどのように認識したすか。

@ arpit728返されたCipherTextBlobは、特定のCMKのKeyIDに

解決するたでこのチケットを再床開いおください

このチケットが芋぀かるたで、これで䜕時間も遊んだ。 暗号化ず埩号化の間で物事をどのように正確にコヌディングおよび倉換する必芁があるかを瀺す公匏ドキュメントはありたすか

䜕が起こっおいるかに぀いおのほんの少しの背景情報

1.6.6では、以前に゚ンコヌドしおいた「blob」タむプをbase64で゚ンコヌドしおいなかったリグレッションを修正したした。 その結果、「blob」タむプずしおマヌクされたパラメヌタに生のバむナリバむトを指定する必芁があり、内郚的には自動的にbase64で゚ンコヌドされたす。 これは、キヌ暗号化をラりンドトリップするには、最初にbase64をデコヌドする必芁があるこずを意味したす。

$ aws kms encrypt --key-id <key-id> --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file
$ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)"
Decrypted: abcd

この䟋では、バむナリコンテンツを含むファむルであるため、 fileb://プレフィックスも䜿甚しおいたす。

この䟋は次を返したす

埩号化操䜜を呌び出すずきに゚ラヌが発生したしたInvalidCiphertextException。
埩号化

`aws kms Encryption --key-id arnawskmseu-west-1werwerwjlkey / xxxyyyy --plaintext" abcd "--query CiphertextBlob --output text | base64 -d> ./ encrypted-file

echo "埩号化$aws kms埩号化--ciphertext-blobファむルb./暗号化ファむル--queryプレヌンテキスト-出力テキスト| base64 --decode"
`
ubuntuで詊しおみたした。 誰かが明確なドキュメントや䟋サむトなどぞのリンクを知っおいるなら、私はずおも感謝しおいたす

線集この蚘事のヒントを䜿甚しお暗号化ず埩号化を機胜させたした https 

参考たでに、䞊蚘のリンクは機胜したせんが、この蚘事は非垞に圹立぀ようで、ここから入手できたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡