Hai, juara crypto! Bersedia untuk menyelami dunia tandatangan digital? Anggap ini sebagai autograf digital anda - satu cara untuk membuktikan anda benar-benar anda dalam dunia digital, dan mesej anda tidak diusik. Mari terokai cara Go membantu kami mencipta John Hancock digital yang tidak boleh dipalsukan ini!
Pertama sekali, kami mempunyai tandatangan RSA. Ia seperti menandatangani dokumen dengan pen yang sangat mewah dan tidak boleh dipalsukan.
import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { // Let's create our special signing pen (RSA key pair) privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic("Oops! Our pen ran out of ink.") } publicKey := &privateKey.PublicKey // Our important message message := []byte("I solemnly swear that I am up to no good.") // Let's create a fingerprint of our message hash := sha256.Sum256(message) // Time to sign! signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash[:]) if err != nil { panic("Our hand cramped while signing!") } fmt.Printf("Our RSA signature: %x\n", signature) // Now, let's verify our signature err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hash[:], signature) if err != nil { fmt.Println("Uh-oh, someone forged our signature!") } else { fmt.Println("Signature checks out. Mischief managed!") } }
Seterusnya, kami mempunyai tandatangan ECDSA. Ia seperti sepupu RSA yang lebih hebat, lebih cekap - tandatangan yang lebih kecil dengan tahap keselamatan yang sama.
import ( "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "crypto/sha256" "fmt" "math/big" ) func main() { // Let's create our curvy signing pen privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { panic("Our curvy pen got a bit too curvy!") } publicKey := &privateKey.PublicKey // Our important message message := []byte("Elliptic curves are mathematically delicious!") // Create a fingerprint of our message hash := sha256.Sum256(message) // Time to sign with our curvy pen! r, s, err := ecdsa.Sign(rand.Reader, privateKey, hash[:]) if err != nil { panic("Our hand slipped while signing these curves!") } signature := append(r.Bytes(), s.Bytes()...) fmt.Printf("Our curvy ECDSA signature: %x\n", signature) // Let's verify our curvy signature r = new(big.Int).SetBytes(signature[:len(signature)/2]) s = new(big.Int).SetBytes(signature[len(signature)/2:]) valid := ecdsa.Verify(publicKey, hash[:], r, s) fmt.Printf("Is our curvy signature valid? %v\n", valid) }
Akhir sekali, kami mempunyai tandatangan Ed25519. Ini seperti kereta sukan tandatangan digital - pantas dan selamat.
import ( "crypto/ed25519" "crypto/rand" "fmt" ) func main() { // Let's create our speedy signing pen publicKey, privateKey, err := ed25519.GenerateKey(rand.Reader) if err != nil { panic("Our speedy pen got a speeding ticket!") } // Our important message message := []byte("Speed is my middle name!") // Time to sign at lightning speed! signature := ed25519.Sign(privateKey, message) fmt.Printf("Our speedy Ed25519 signature: %x\n", signature) // Let's verify our speedy signature valid := ed25519.Verify(publicKey, message, signature) fmt.Printf("Is our speedy signature valid? %v\n", valid) }
Sekarang, anda mungkin tertanya-tanya, "Tandatangan yang manakah harus saya gunakan?" Nah, ia bergantung pada keperluan anda:
Sekarang anda seorang artis tandatangan, berikut ialah beberapa peraturan emas yang perlu diingat:
Rawak adalah kunci: Sentiasa gunakan crypto/rand untuk apa-apa yang berkaitan dengan tandatangan. Rawak yang boleh diramal adalah seperti menggunakan tandatangan yang sama setiap kali - tidak bagus!
Cincang sebelum anda menandatangani: Kecuali Ed25519, sentiasa cincang mesej anda sebelum menandatangani. Ia seperti mencipta cap jari unik mesej anda.
Saiz penting: Gunakan sekurang-kurangnya 2048 bit untuk RSA, 256 bit untuk ECDSA dan Ed25519 sentiasa 256 bit.
Pastikan pen anda selamat: Lindungi kunci peribadi anda seperti anda melindungi harta benda anda yang paling berharga. Kunci tandatangan yang dicuri adalah seperti seseorang yang mencuri identiti anda!
Sahkan pengesah anda: Pastikan kunci awam yang anda gunakan untuk mengesahkan tandatangan adalah sah. Kunci awam palsu boleh membuatkan anda mempercayai tandatangan palsu!
Seragamkan apabila boleh: Pertimbangkan untuk menggunakan format seperti JSON Web Signature (JWS) jika anda perlu bermain baik dengan sistem lain.
Berhati-hati dengan serangan licik: Dalam senario keselamatan tinggi, berhati-hati terhadap serangan saluran sisi. Mereka seperti seseorang yang mengintip dari atas bahu anda semasa anda menandatangani.
Tahniah! Anda baru sahaja menambah tandatangan digital pada kit alat kriptografi anda. Ini adalah penting untuk membuktikan keaslian dan integriti dalam dunia digital.
Seterusnya, kami akan meneroka cara Go mengendalikan sijil TLS dan X.509. Ia seperti belajar cara membuat dan mengesahkan kad ID digital - penting untuk komunikasi selamat di internet!
Ingat, dalam dunia kriptografi, memahami asas ini adalah penting. Ia seperti belajar menulis tandatangan anda - kemahiran asas dalam era digital. Kuasai ini dan anda akan berjaya mencipta aplikasi yang selamat dan disahkan dalam Go.
Jadi, bagaimana pula jika anda cuba melaksanakan sistem tandatangan dokumen yang mudah? Atau mungkin mencipta program yang mengesahkan kemas kini perisian menggunakan tandatangan digital? Dunia autograf digital yang tidak boleh dipalsukan berada di hujung jari anda! Selamat mengekod, juara kripto!
Atas ialah kandungan terperinci Tandatangan Digital: Kriptografi Anda John Hancock, Go Crypto 6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!