"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Firmas digitales: su John Hancock criptográfico, Go Crypto 6

Firmas digitales: su John Hancock criptográfico, Go Crypto 6

Publicado el 2025-01-20
Navegar:370

Digital Signatures: Your Cryptographic John Hancock, Go Crypto 6

¡Hola, campeón de criptografía! ¿Listo para sumergirte en el mundo de las firmas digitales? Piense en esto como su autógrafo digital: una forma de demostrar que realmente es usted mismo en el mundo digital y que su mensaje no ha sido alterado. ¡Exploremos cómo Go nos ayuda a crear estos John Hancocks digitales inolvidables!

Firmas RSA: el autógrafo clásico

Primero, tenemos firmas RSA. Es como firmar un documento con un bolígrafo realmente elegante e imperdible.

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!")
    }
}

Firmas ECDSA: El autógrafo curvilíneo

A continuación, tenemos las firmas ECDSA. Es como el primo más atractivo y eficiente de RSA: firmas más pequeñas con el mismo nivel de seguridad.

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)
}

Ed25519 Firmas: El autógrafo del demonio de la velocidad

Finalmente, tenemos firmas Ed25519. Son como el coche deportivo de las firmas digitales: rápidos y seguros.

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)
}

Elegir tu firma perfecta

Ahora quizás te preguntes: "¿Qué firma debo usar?" Bueno, depende de tus necesidades:

  1. RSA: Es como la navaja suiza de las firmas. Ampliamente compatible, pero las firmas son un poco fragmentadas.
  2. ECDSA: Es el término medio. Firmas más pequeñas que RSA, aún ampliamente admitidas.
  3. Ed25519: El chico nuevo de la cuadra. Firmas pequeñas y súper rápidas, pero es posible que aún no se admitan en todas partes.

Las reglas de oro de las firmas digitales

Ahora que eres un artista exclusivo, aquí tienes algunas reglas de oro que debes tener en cuenta:

  1. La aleatoriedad es clave: utilice siempre cripto/rand para todo lo relacionado con firmas. La aleatoriedad predecible es como usar la misma firma cada vez: ¡no es bueno!

  2. Hash antes de firmar: Excepto Ed25519, siempre hash tu mensaje antes de firmar. Es como crear una huella digital única de tu mensaje.

  3. El tamaño importa: use al menos 2048 bits para RSA, 256 bits para ECDSA y Ed25519 siempre es de 256 bits.

  4. Mantenga sus bolígrafos seguros: proteja sus claves privadas como protegería sus posesiones más preciadas. ¡Una clave de firma robada es como si alguien robara su identidad!

  5. Verifica tus verificadores: asegúrate de que las claves públicas que estás utilizando para verificar las firmas sean legítimas. ¡Una clave pública falsa podría hacerte confiar en una firma falsa!

  6. Estandarizar cuando sea posible: considere usar formatos como JSON Web Signature (JWS) si necesita funcionar bien con otros sistemas.

  7. Esté atento a los ataques furtivos: en escenarios de alta seguridad, tenga cuidado con los ataques de canal lateral. Son como si alguien estuviera mirando por encima de tu hombro mientras firmas.

¿Qué sigue?

¡Felicidades! Acaba de agregar firmas digitales a su kit de herramientas criptográficas. Estos son cruciales para demostrar autenticidad e integridad en el mundo digital.

A continuación, exploraremos cómo Go maneja los certificados TLS y X.509. Es como aprender a crear y verificar tarjetas de identificación digitales: ¡esencial para una comunicación segura en Internet!

Recuerde, en el mundo de la criptografía, comprender estos conceptos básicos es crucial. Es como aprender a escribir tu firma, una habilidad fundamental en la era digital. Domine estos y estará en el camino correcto para crear aplicaciones seguras y autenticadas en Go.

Entonces, ¿qué tal si intentas implementar un sistema simple de firma de documentos? ¿O tal vez crear un programa que verifique las actualizaciones de software mediante firmas digitales? ¡El mundo de los autógrafos digitales inolvidables está a tu alcance! ¡Feliz codificación, campeón de criptografía!

Declaración de liberación Este artículo se reproduce en: https://dev.to/rezmoss/digital-signatures-your-cryptographic-john-hancock-go-crypto-6-5f3p?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3