es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementación de Curva Elíptica para claves de producto.

Aquí leí acerca de la idea básica de cómo utilizar el cifrado asimétrico de curva elíptica para crear una clave de producto, aquí está una cita:

Aquí es posible crear una clave de producto de 128 bits mediante una curva elíptica, ya que si se cifra un texto de longitud X, se obtiene un cifrado mucho más largo que X?

A continuación se muestra el código de prueba que escribí, un mensaje de 8 caracteres cifrado en un arreglo de 28 bytes, ¿en qué me estoy equivocando o es posible utilizar la Curva Elíptica para crear una clave de producto de 25 caracteres?

using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using System.Text;
using System.Linq;
using Org.BouncyCastle.Crypto.Engines;
using System.Diagnostics;
using Org.BouncyCastle.Crypto.Agreement;
using Org.BouncyCastle.Asn1.X9;
using Org.BouncyCastle.Crypto.Digests;
using Org.BouncyCastle.Crypto.Macs;

class Program
{
    public static void Main(string[] args)
    {
        var keyPairGenerator = new ECKeyPairGenerator("ECDH");
        var x9 = ECNamedCurveTable.GetByName("secp128r1");
        keyPairGenerator.Init(new ECKeyGenerationParameters(new ECDomainParameters(x9), new SecureRandom()));
        var keyPair = keyPairGenerator.GenerateKeyPair();

        byte[] d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
        byte[] e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 };
        var p = new IesWithCipherParameters(d, e, 64, 128);

        var cipher = new IesEngine(
                       new ECDHBasicAgreement(),
                       new Kdf2BytesGenerator(new Sha1Digest()),
                       new HMac(new Sha1Digest()));

        var message = Encoding.UTF8.GetBytes("12345678");

        cipher.Init(true, keyPair.Private, keyPair.Public, p);
        var encryption = cipher.ProcessBlock(message, 0, message.Length); // longitud de cifrado es 28 <==

        cipher.Init(false, keyPair.Private, keyPair.Public, p);
        var decryption = cipher.ProcessBlock(encryption, 0, encryption.Length);

        Debug.Assert(decryption.SequenceEqual(message));
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La longitud de la salida de encriptación de un algoritmo de curva elíptica depende del tamaño de la clave utilizada, no de la longitud del mensaje en texto plano. Por lo tanto, es posible crear una clave de producto utilizando un algoritmo de curva elíptica de 128 bits.

    En el código proporcionado, la longitud de la salida es efectivamente de 28 bytes, lo cual es esperado para una encriptación de 128 bits. La longitud de la salida no necesita coincidir con la longitud del mensaje original o de la clave.

    Para crear una clave de producto de 25 caracteres, podrías utilizar un tamaño de clave que resulte en una salida más larga y luego codificarla utilizando una codificación de caracteres como base64 o hexadecimal. Esto producirá una cadena más corta que se puede utilizar como clave de producto.

Comments are closed.