github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/crypto/x509/pem_decrypt.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package x509 6 7 import ( 8 "github.com/shogo82148/std/encoding/pem" 9 "github.com/shogo82148/std/errors" 10 "github.com/shogo82148/std/io" 11 ) 12 13 type PEMCipher int 14 15 // EncryptPEMBlock暗号化アルゴリズムの可能な値。 16 const ( 17 _ PEMCipher = iota 18 PEMCipherDES 19 PEMCipher3DES 20 PEMCipherAES128 21 PEMCipherAES192 22 PEMCipherAES256 23 ) 24 25 // IsEncryptedPEMBlockは、PEMブロックがRFC 1423に従ってパスワードで暗号化されているかどうかを返します。 26 // 27 // Deprecated: RFC 1423で指定されている従来のPEM暗号化は、設計上の問題により安全ではありません。この方法では、暗号文を認証しないため、パディングオラクル攻撃に対して脆弱であり、攻撃者に平文を復元させる可能性があります。 28 func IsEncryptedPEMBlock(b *pem.Block) bool 29 30 // IncorrectPasswordError は、不正なパスワードが検出された場合に返されます。 31 var IncorrectPasswordError = errors.New("x509: decryption password incorrect") 32 33 // DecryptPEMBlockは、RFC 1423に従って暗号化されたPEMブロックと、それを暗号化するために使用されたパスワードを受け取り、復号化されたDER形式のバイトのスライスを返します。復号化に使用されるアルゴリズムは、DEK-Infoヘッダを調べて決定されます。DEK-Infoヘッダが存在しない場合、エラーが返されます。不正なパスワードが検出された場合、 [IncorrectPasswordError] が返されます。フォーマットの不備のため、常に不正なパスワードを検出することはできません。これらの場合、エラーは返されませんが、復号化されたDERバイトはランダムなノイズになります。 34 // 35 // Deprecated: RFC 1423で指定されたレガシーなPEM暗号化はセキュリティの設計上の問題があります。暗号文を認証しないため、パディングオラクル攻撃に対して脆弱であり、攻撃者が平文を回復することができます。 36 func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error) 37 38 // EncryptPEMBlockは、指定されたアルゴリズムとパスワードで暗号化された指定されたDERエンコードされたデータを保持する指定されたタイプのPEMブロックを返します。 39 // 40 // 廃止予定: RFC 1423で指定されているレガシーPEM暗号化は、設計上安全ではありません。暗号文を認証しないため、パディングオラクル攻撃に対して脆弱であり、攻撃者が平文を復号化できる可能性があります。 41 func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error)