おい、スピードデーモン!暗号資産運用を拡大する準備はできていますか?暗号化の世界ではセキュリティが最優先事項ですが、場合によっては、細かく調整されたスポーツカーのように安全なコードを実行する必要があります。 Go で暗号化操作をベンチマークし、最適化する方法について詳しく見ていきましょう!
Go には、暗号通貨レース用のストップウォッチが内蔵されています。暗号化スプリントの時間を計る方法は次のとおりです:
package main import ( "crypto/aes" "crypto/cipher" "crypto/rand" "crypto/rsa" "crypto/sha256" "testing" ) func BenchmarkAESEncryption(b *testing.B) { key := make([]byte, 32) rand.Read(key) block, _ := aes.NewCipher(key) gcm, _ := cipher.NewGCM(block) nonce := make([]byte, gcm.NonceSize()) plaintext := make([]byte, 1024) // 1KB of secret message b.ResetTimer() for i := 0; i < b.N; i++ { gcm.Seal(nil, nonce, plaintext, nil) } } func BenchmarkSHA256(b *testing.B) { data := make([]byte, 1024) // 1KB of data to hash b.ResetTimer() for i := 0; i < b.N; i++ { sha256.Sum256(data) } } func BenchmarkRSAEncryption(b *testing.B) { privateKey, _ := rsa.GenerateKey(rand.Reader, 2048) publicKey := &privateKey.PublicKey message := make([]byte, 32) // A small secret message b.ResetTimer() for i := 0; i < b.N; i++ { rsa.EncryptPKCS1v15(rand.Reader, publicKey, message) } }
これらの暗号レースを実行するには、次を使用します:
go test -bench=.
暗号通貨運用にレーダー銃を持っているようなものです!
Go の暗号パッケージはスマート レースカーのようなもので、特別なハードウェア機能が利用可能な場合には自動的に使用されます。これには以下が含まれます:
CPU にどのようなターボチャージャーが搭載されているか知りたいですか?これを試してください:
GODEBUG=cpu.all=1 go run myprogram.go
CPU のフードを開けて、どのような特別な暗号エンジンが搭載されているかを確認するようなものです!
暗号アルゴリズムの違いは、レースカーの種類の違いに似ています。レースを設定しましょう:
func BenchmarkAES(b *testing.B) { /* ... */ } func BenchmarkChaCha20(b *testing.B) { /* ... */ } func BenchmarkRSA2048(b *testing.B) { /* ... */ } func BenchmarkECDSAP256(b *testing.B) { /* ... */ } func BenchmarkSHA256(b *testing.B) { /* ... */ } func BenchmarkSHA3_256(b *testing.B) { /* ... */ }
これらを実行すると、特定のトラック (ハードウェア) でどの仮想通貨カーが最速であるかがわかります!
AES-GCM はフォーミュラ 1 カーです: 対称暗号化の場合、特に AES-NI を使用すると安全かつ超高速です。
楕円曲線はラリーカーです: 非対称操作では、ECDSA と ECDH が RSA トラックを上回ることがよくあります。
エンジンを再利用する: 暗号オブジェクトの作成は、エンジンをウォームアップするようなものです。一度実行すれば、複数周にわたって再利用できます:
block, _ := aes.NewCipher(key) gcm, _ := cipher.NewGCM(block) // Reuse 'gcm' for multiple encryptions
エンジンのサイズを適切に調整する: 大きいほど必ずしも良いとは限りません。セキュリティのニーズを満たす最小のキー サイズを使用してください。
バッチ処理はドラフトに似ています: 小規模な暗号操作を多数実行している場合は、それらをバッチ処理してオーバーヘッドを削減します。
すべてのシリンダーを使用する: Go の同時実行性は、複数のエンジンを持つようなものです。これらを並列暗号化操作に使用します:
package main import ( "crypto/aes" "crypto/cipher" "crypto/rand" "crypto/rsa" "crypto/sha256" "testing" ) func BenchmarkAESEncryption(b *testing.B) { key := make([]byte, 32) rand.Read(key) block, _ := aes.NewCipher(key) gcm, _ := cipher.NewGCM(block) nonce := make([]byte, gcm.NonceSize()) plaintext := make([]byte, 1024) // 1KB of secret message b.ResetTimer() for i := 0; i < b.N; i++ { gcm.Seal(nil, nonce, plaintext, nil) } } func BenchmarkSHA256(b *testing.B) { data := make([]byte, 1024) // 1KB of data to hash b.ResetTimer() for i := 0; i < b.N; i++ { sha256.Sum256(data) } } func BenchmarkRSAEncryption(b *testing.B) { privateKey, _ := rsa.GenerateKey(rand.Reader, 2048) publicKey := &privateKey.PublicKey message := make([]byte, 32) // A small secret message b.ResetTimer() for i := 0; i < b.N; i++ { rsa.EncryptPKCS1v15(rand.Reader, publicKey, message) } }
仮想通貨レーサーの皆さん、スピードはスリリングですが、安全が最も重要であることを覚えておいてください。数ミリ秒の速度のためにセキュリティを犠牲にしないでください。最高の暗号コードは、優れた設計のレーシングカーのようなもので、高速であるだけでなく、安全性と信頼性も備えています。
現実世界で使用するものと同様のハードウェア上で暗号コードのベンチ テストを常に行ってください。トラック (ハードウェア) が異なれば、まったく異なる結果が生じる可能性があります!
そして、時には最も単純で最も直接的な実装が最善であることを覚えておいてください。本当に必要な場合を除き、過剰な最適化を行わないでください。時期尚早な最適化は、自転車にスポイラーを追加するようなものです!
さあ、暗号エンジンを回転させて、あなたの安全なコードが風のように飛んでいきますように!レースを楽しんでください、暗号通貨スピードの悪魔!
以上がGo のスピードでの暗号化: パフォーマンスに関する考慮事項、Go Crypto 11の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。