ホームページ > バックエンド開発 > Golang > Go のスピードでの暗号化: パフォーマンスに関する考慮事項、Go Crypto 11

Go のスピードでの暗号化: パフォーマンスに関する考慮事項、Go Crypto 11

Patricia Arquette
リリース: 2024-12-08 21:45:16
オリジナル
341 人が閲覧しました

Crypto at the Speed of Go: Performance Considerations, Go Crypto 11

おい、スピードデーモン!暗号資産運用を拡大する準備はできていますか?暗号化の世界ではセキュリティが最優先事項ですが、場合によっては、細かく調整されたスポーツカーのように安全なコードを実行する必要があります。 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 の暗号パッケージはスマート レースカーのようなもので、特別なハードウェア機能が利用可能な場合には自動的に使用されます。これには以下が含まれます:

  1. AES-NI: x86 プロセッサー上の AES のための特別な命令。 AES のニトロ ブーストのようなものです!
  2. ハードウェア SHA は一部の ARM プロセッサで機能します。まるで専用のハッシュ計算エンジンがあるようなものです!

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)  { /* ... */ }
ログイン後にコピー

これらを実行すると、特定のトラック (ハードウェア) でどの仮想通貨カーが最速であるかがわかります!

暗号化エンジンのチューニングのヒント

  1. AES-GCM はフォーミュラ 1 カーです: 対称暗号化の場合、特に AES-NI を使用すると安全かつ超高速です。

  2. 楕円曲線はラリーカーです: 非対称操作では、ECDSA と ECDH が RSA トラックを上回ることがよくあります。

  3. エンジンを再利用する: 暗号オブジェクトの作成は、エンジンをウォームアップするようなものです。一度実行すれば、複数周にわたって再利用できます:

block, _ := aes.NewCipher(key)
gcm, _ := cipher.NewGCM(block)
// Reuse 'gcm' for multiple encryptions
ログイン後にコピー
  1. エンジンのサイズを適切に調整する: 大きいほど必ずしも良いとは限りません。セキュリティのニーズを満たす最小のキー サイズを使用してください。

  2. バッチ処理はドラフトに似ています: 小規模な暗号操作を多数実行している場合は、それらをバッチ処理してオーバーヘッドを削減します。

  3. すべてのシリンダーを使用する: 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)
    }
}
ログイン後にコピー
ログイン後にコピー
  1. 種族のプロファイリング: Go のプロファイリング ツールを使用して、暗号コードが最も多くの時間を費やしている場所を見つけます。それは、暗号通貨の車にテレメトリーを備えているようなものです!

チェッカーフラッグ

仮想通貨レーサーの皆さん、スピードはスリリングですが、安全が最も重要であることを覚えておいてください。数ミリ秒の速度のためにセキュリティを犠牲にしないでください。最高の暗号コードは、優れた設計のレーシングカーのようなもので、高速であるだけでなく、安全性と信頼性も備えています。

現実世界で使用するものと同様のハードウェア上で暗号コードのベンチ テストを常に行ってください。トラック (ハードウェア) が異なれば、まったく異なる結果が生じる可能性があります!

そして、時には最も単純で最も直接的な実装が最善であることを覚えておいてください。本当に必要な場合を除き、過剰な最適化を行わないでください。時期尚早な最適化は、自転車にスポイラーを追加するようなものです!

さあ、暗号エンジンを回転させて、あなたの安全なコードが風のように飛んでいきますように!レースを楽しんでください、暗号通貨スピードの悪魔!

以上がGo のスピードでの暗号化: パフォーマンスに関する考慮事項、Go Crypto 11の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート