Tandatangan Digital: Kriptografi Anda John Hancock, Go Crypto 6

Susan Sarandon
Lepaskan: 2024-11-04 04:24:02
asal
744 orang telah melayarinya

Digital Signatures: Your Cryptographic John Hancock, Go Crypto 6

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!

Tandatangan RSA: Autograf Klasik

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!")
    }
}
Salin selepas log masuk

Tandatangan ECDSA: Autograf Curvy

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)
}
Salin selepas log masuk

Ed25519 Tandatangan: The Speed ​​Demon Autograph

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)
}
Salin selepas log masuk

Memilih Tandatangan Sempurna Anda

Sekarang, anda mungkin tertanya-tanya, "Tandatangan yang manakah harus saya gunakan?" Nah, ia bergantung pada keperluan anda:

  1. RSA: Ia seperti pisau Swiss Army tandatangan. Disokong secara meluas, tetapi tandatangannya agak tebal.
  2. ECDSA: Ia adalah jalan tengah. Tandatangan yang lebih kecil daripada RSA, masih disokong secara meluas.
  3. Ed25519: Kanak-kanak baharu di blok itu. Tanda tangan yang sangat pantas, kecil, tetapi mungkin belum disokong di mana-mana lagi.

Peraturan Emas Tandatangan Digital

Sekarang anda seorang artis tandatangan, berikut ialah beberapa peraturan emas yang perlu diingat:

  1. 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!

  2. Cincang sebelum anda menandatangani: Kecuali Ed25519, sentiasa cincang mesej anda sebelum menandatangani. Ia seperti mencipta cap jari unik mesej anda.

  3. Saiz penting: Gunakan sekurang-kurangnya 2048 bit untuk RSA, 256 bit untuk ECDSA dan Ed25519 sentiasa 256 bit.

  4. 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!

  5. Sahkan pengesah anda: Pastikan kunci awam yang anda gunakan untuk mengesahkan tandatangan adalah sah. Kunci awam palsu boleh membuatkan anda mempercayai tandatangan palsu!

  6. Seragamkan apabila boleh: Pertimbangkan untuk menggunakan format seperti JSON Web Signature (JWS) jika anda perlu bermain baik dengan sistem lain.

  7. 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.

Apa Seterusnya?

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!