자, 스피드 악마! 암호화폐 작업을 확대할 준비가 되셨나요? 암호화 세계에서는 보안이 최우선 사항이지만 때로는 정밀하게 조정된 스포츠카처럼 실행되기 위해 보안 코드가 필요할 때도 있습니다. 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의 후드를 열어 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은 최고의 자동차입니다: 대칭 암호화의 경우 특히 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) } }
Crypto Racer를 기억하세요. 속도는 스릴 넘치지만 안전이 가장 중요합니다. 몇 밀리초의 속도를 위해 보안을 희생하지 마십시오. 최고의 암호화폐 코드는 잘 설계된 경주용 자동차와 같습니다. 빠르면서도 안전하고 신뢰할 수 있습니다.
항상 실제 세계에서 사용하게 될 것과 유사한 하드웨어에서 암호화 코드를 벤치 테스트하세요. 트랙(하드웨어)에 따라 매우 다른 결과가 나올 수 있습니다!
때로는 가장 간단하고 간단한 구현이 최고라는 점을 기억하세요. 꼭 필요한 경우가 아니면 과도하게 최적화하지 마십시오. 성급한 최적화는 자전거에 스포일러를 추가하는 것과 같습니다!
이제 암호화 엔진을 강화하고 보안 코드가 바람처럼 날아가기를 바랍니다! 즐거운 레이싱, 암호화폐 속도의 악마!
위 내용은 Go의 속도로 암호화폐: 성능 고려 사항, Go Crypto 11의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!