Qualunque elemento di campo ECC può essere serializzato in sicurezza come "compresso" e quindi ripristinato come non compresso?

0

Ho una libreria che memorizza tutti i suoi elementi del campo ECC in formato non compresso, in un formato XML Base64 gonfiato, e lo storage è diventato un problema. (Vogliamo supportare il codice QR come fattore di forma, ecc.)

Piuttosto che chiedere agli autori delle librerie crittografiche di supportare i punti compressi in ECC (non so quanto sarebbe difficile questo) penso che sia possibile avere un proxy software pezzo per acquisire questi elementi in linea, comprimerli (con un segno di bit) e decomprimerli durante la deserializzazione

My goal is to make the library not even know that I used compressed ECC for temporary, in-transit storage.

È un approccio praticabile? Quali altre cose dovrei considerare prima di fare questo?

Per riferimento, ho intenzione di utilizzare questo codice in Bouncy Castle

    public override byte[] GetEncoded(bool compressed)
    {
        if (this.IsInfinity)
        {
            return new byte[1];
        }

        ECPoint normed = Normalize();

        byte[] X = normed.XCoord.GetEncoded();

        if (compressed)
        {
            byte[] PO = new byte[X.Length + 1];
            PO[0] = (byte)(normed.CompressionYTilde ? 0x03 : 0x02);
            Array.Copy(X, 0, PO, 1, X.Length);
            return PO;
        }

        byte[] Y = normed.YCoord.GetEncoded();

        {
            byte[] PO = new byte[X.Length + Y.Length + 1];
            PO[0] = 0x04;
            Array.Copy(X, 0, PO, 1, X.Length);
            Array.Copy(Y, 0, PO, X.Length + 1, Y.Length);
            return PO;
        }
    }
    
posta random65537 24.07.2014 - 21:59
fonte

1 risposta

2

La compressione del punto non perde informazioni; questo è il punto.

Dettagli tecnici: supponiamo di lavorare nel campo Z p per un grande primo p . L'equazione della curva è:

Y 2 = X 3 + aX + b

per due costanti a e b che definiscono la curva. Per un punto (X, Y) sulla curva, puoi usare l'equazione per recuperare Y 2 da X da solo. Dato che stiamo lavorando in un campo, Y 2 può avere al massimo due radici quadrate, e sono opposte l'una all'altra (cioè Y e -Y ). Poiché p è un grande primo, è strano, quindi Y e -Y differiscono sempre nel loro bit meno significativo, tranne se Y = 0 , nel qual caso anche -Y = 0 . Pertanto, la conoscenza di X e il meno significativo di Y è sempre sufficiente per univocamente recuperare Y , a cui punta al punto.

(Inoltre, normalmente scegli la curva in modo che abbia un ordine primo, il che implica indirettamente che non ci può essere alcun punto sulla curva tale che Y = 0 . Ma anche se c'è un punto, quindi la compressione funziona ancora.)

Un meccanismo simile funziona per le curve binarie (quando il campo è GF (2 m ) per alcuni interi m ) ma è leggermente più complesso da spiegare (riguarda il calcolo delle mezze tracce).

Fai attenzione, quando non compresso, per assicurarti di ottenere un punto valido. Se il calcolo produce un valore " Y 2 " che non è in realtà un quadrato in Z p , quindi la decompressione fallirà, ma alcune funzioni radice quadrate non se ne accorgeranno. Il comportamento indesiderato su dati anormali è una classica fonte di debolezza della sicurezza; tale è la sottigliezza della pratica crittografia.

Ci sono alcune voci secondo cui la compressione dei punti sarebbe ancora coperta da alcuni brevetti, il che spiega perché gli sviluppatori di librerie opensource non si affrettano a implementarlo. Se la voce è vera, però, è un'altra storia. Questa pagina di Wikipedia elenca due brevetti, one di Certicom (ma riguarda solo le curve binarie in GF (2 m )) e scade il 29 luglio, a soli cinque giorni da ora) e un altro di HP (che si propone di coprire la compressione dei punti in generale, ma la metà si concentra sul binario curve).

I penso che il brevetto HP non sarebbe andato molto lontano in tribunale, in particolare da quando è stato depositato nel 1998, momento in cui il concetto di compressione puntuale era già stato pubblicato in lungo e in largo. Io non sono un avvocato specializzato in brevetti, però (sono un orso con un nome falso).

    
risposta data 25.07.2014 - 00:51
fonte

Leggi altre domande sui tag