Heim > Backend-Entwicklung > Golang > Digitale Signaturen: Ihr kryptografischer John Hancock, Go Crypto 6

Digitale Signaturen: Ihr kryptografischer John Hancock, Go Crypto 6

Susan Sarandon
Freigeben: 2024-11-04 04:24:02
Original
878 Leute haben es durchsucht

Digital Signatures: Your Cryptographic John Hancock, Go Crypto 6

Hey, Krypto-Champion! Bereit, in die Welt der digitalen Signaturen einzutauchen? Betrachten Sie diese als Ihr digitales Autogramm – eine Möglichkeit, in der digitalen Welt zu beweisen, dass Sie wirklich Sie selbst sind und dass Ihre Botschaft nicht manipuliert wurde. Lassen Sie uns erkunden, wie Go uns dabei hilft, diese fälschungssicheren digitalen John Hancocks zu erstellen!

RSA-Signaturen: Das klassische Autogramm

Zuerst haben wir RSA-Signaturen. Es ist, als würde man ein Dokument mit einem wirklich schicken, fälschungssicheren Stift unterschreiben.

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!")
    }
}
Nach dem Login kopieren

ECDSA-Signaturen: Das kurvige Autogramm

Als nächstes haben wir ECDSA-Signaturen. Es ist wie der coolere, effizientere Cousin von RSA – kleinere Signaturen mit dem gleichen Sicherheitsniveau.

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)
}
Nach dem Login kopieren

Ed25519 Signaturen: The Speed ​​Demon Autogramm

Endlich haben wir Ed25519-Unterschriften. Diese sind wie der Sportwagen der digitalen Signaturen – schnell und sicher.

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)
}
Nach dem Login kopieren

Wählen Sie Ihre perfekte Signatur

Jetzt fragen Sie sich vielleicht: „Welche Signatur soll ich verwenden?“ Nun, es hängt von Ihren Bedürfnissen ab:

  1. RSA: Es ist wie das Schweizer Taschenmesser der Unterschriften. Weithin unterstützt, aber die Signaturen sind etwas klobig.
  2. ECDSA: Es ist der Mittelweg. Kleinere Signaturen als RSA, immer noch weithin unterstützt.
  3. Ed25519: Der Neue im Block. Superschnell, kleine Signaturen, wird aber möglicherweise noch nicht überall unterstützt.

Die goldenen Regeln digitaler Signaturen

Da Sie nun ein Signature-Künstler sind, sollten Sie die folgenden goldenen Regeln beachten:

  1. Zufälligkeit ist der Schlüssel: Verwenden Sie immer Krypto/Rand für alles, was mit Signaturen zu tun hat. Vorhersehbare Zufälligkeit ist, als würde man jedes Mal dieselbe Signatur verwenden – nicht gut!

  2. Hashen Sie Ihre Nachricht vor dem Signieren: Mit Ausnahme von Ed25519 sollten Sie Ihre Nachricht immer hashen, bevor Sie sie signieren. Es ist, als würde man einen einzigartigen Fingerabdruck Ihrer Nachricht erstellen.

  3. Auf die Größe kommt es an: Verwenden Sie mindestens 2048 Bit für RSA, 256 Bit für ECDSA und Ed25519 beträgt immer 256 Bit.

  4. Bewahren Sie Ihre Stifte sicher auf: Schützen Sie Ihre privaten Schlüssel so, wie Sie Ihre wertvollsten Besitztümer schützen würden. Ein gestohlener Signaturschlüssel ist, als würde jemand Ihre Identität stehlen!

  5. Überprüfen Sie Ihre Prüfer: Stellen Sie sicher, dass die öffentlichen Schlüssel, die Sie zur Überprüfung von Signaturen verwenden, legitim sind. Ein gefälschter öffentlicher Schlüssel könnte dazu führen, dass Sie einer gefälschten Signatur vertrauen!

  6. Standardisieren, wenn möglich: Erwägen Sie die Verwendung von Formaten wie JSON Web Signature (JWS), wenn Sie gut mit anderen Systemen funktionieren müssen.

  7. Achten Sie auf hinterhältige Angriffe: Achten Sie in Hochsicherheitsszenarien auf Seitenkanalangriffe. Sie sind wie jemand, der Ihnen beim Unterschreiben über die Schulter schaut.

Was kommt als nächstes?

Herzlichen Glückwunsch! Sie haben gerade digitale Signaturen zu Ihrem kryptografischen Toolkit hinzugefügt. Diese sind entscheidend für den Nachweis von Authentizität und Integrität in der digitalen Welt.

Als nächstes untersuchen wir, wie Go mit TLS- und X.509-Zertifikaten umgeht. Es ist, als würde man lernen, wie man digitale Ausweise erstellt und verifiziert – unerlässlich für die sichere Kommunikation im Internet!

Denken Sie daran, dass es in der Welt der Kryptographie von entscheidender Bedeutung ist, diese Grundlagen zu verstehen. Es ist, als würde man lernen, seine Unterschrift zu schreiben – eine grundlegende Fähigkeit im digitalen Zeitalter. Wenn Sie diese beherrschen, sind Sie auf dem besten Weg, sichere, authentifizierte Anwendungen in Go zu erstellen.

Wie wäre es also, wenn Sie versuchen würden, ein einfaches System zum Signieren von Dokumenten zu implementieren? Oder vielleicht ein Programm erstellen, das Software-Updates mithilfe digitaler Signaturen überprüft? Die Welt der fälschungssicheren digitalen Autogramme steht Ihnen zur Verfügung! Viel Spaß beim Codieren, Krypto-Champion!

Das obige ist der detaillierte Inhalt vonDigitale Signaturen: Ihr kryptografischer John Hancock, Go Crypto 6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage