Digitaalinen allekirjoitus

Mikä olisi yleinen ja helppo ympäristö toteuttaa digitaalinen allekirjoitus ECDSA eli DSA-algoritimin elliptinen versio?

En haluaisi mitään eksoottisia lisäkilkkeitä vaan pitäisi onnistua ihan peruskokoonpanolla. Kenttäaritmetiikka olisi joko alkulukukentässä tai polynomikentässä. Hyvin tärkeänä pitäisin sitä että "pisteen kertominen" (Point Multiplication) saataisiin toteutettua tehokkasti koska se on elliptisen käyrän raskaimpia operaatioita.

- SHA1 -tiivistefunktio mielellään valmiina
- Joko valmiina tai helposti tehtävissä : tehokas isojen kokonaislukujen aritmetiikka (alkulukukenttä) / tehokas polynomiaritmetiikka (polynomikenttä)
- hyvät isot näennäissatunnaisluvut

Ehdokkaita:
- C tai C ; voisi olla sinänsä tehokkain, mutta löytyykö ympäristöistä valmiita toimintoja joita voisi hyödyntää, vai pitäisikö kaikki tehdä itse? Valmista C-koodia tosin löytyy lähteistä.
- C# ; miten hankala tämä olisi?
- Java ; suurten lukujen aritmetiikka luokassa java.math.BigInteger ja myös SHA1 luokassa java.security.MessageDigest ja isot satunnaisluvutkin ovat luokkakirjastossa tarjolla
- PHP ; ei ehkä kovin tehokas, mutta peruskokoonpanosta löytyy sha1 ja isojen lukujen aritmetiikan tarjoavat BcMath-funktiot. BcMath taitaa kuitenkin olla melko tehoton ; esim. jos jakolaskussa tarvitaan sekä osamäärä että jakojäännös niin jako on tehtävä tuplana, 2 funktiokutsua.
1311
Äänestä

Muut lukivat myös

Vastaukset 1

Vanhimmat

Kiitän jo etukäteen mahdollisista kommenteista edelliseen, mutta itse asiassa - kun nyt olen asiaa paremmin miettinyt - luulen että olen sittenkin jo polkuni valinnut.

Toteutus tulee perustumaan C-koodiin, ainakin aluksi lähinnä Michael Rosing:in kirjan "Implementing Elliptic Curve Cryptography" mukaan: http://www.manning.com/rosing/
Ikäähän tuolla kirjalla on jo toistakymmentä vuotta eikä matemaatikot sitä kauheasti alunperinkään ole kehuneet, mutta se on vain lähtökohta josta koodia kehitellään eteenpäin. Luulenpa että polynomikenttä on ensisijainen valinta kenttäaritmetiikaksi.

Lopullisessa ratkaisussa luultavasti käytän valmiita NIST-käyriä enkä Rosing:in käyttämiä satunnaisia käyriä.
http://en.wikipedia.org/wiki/Elliptic_curve_cryptography

Ohjelmointiympäristönä tulee luultavasti toimimaan Qt 4.5 eli Nokian älykännyköillekin sopiva ympäristö koska haaveena on että softa vielä joskus pyörisi myös Symbian- tai Maemo-älykännykässä.
http://qt.nokia.com/products/developer-tools

Qt ei juurikaan sisällä valmiina edellä hahmoteltuja ECC-valmiuksia mutta Rosing:in kirja tarjoaa riittävät eväät mm. sha1:lle ja polynomiaritmetiikalle.

Näin sen täytyy tässä vaiheessa olla. Toivotan onnea itselleni valitsemallani tiellä :-)

Äänestä

Kommentoi aloitusta


miniänäsaa:-) kirjoitti:

Mikä olisi yleinen ja helppo ympäristö toteuttaa digitaalinen allekirjoitus ECDSA eli DSA-algoritimin elliptinen versio?

En haluaisi mitään eksoottisia lisäkilkkeitä vaan pitäisi onnistua ihan peruskokoonpanolla. Kenttäaritmetiikka olisi joko alkulukukentässä tai polynomikentässä. Hyvin tärkeänä pitäisin sitä että "pisteen kertominen" (Point Multiplication) saataisiin toteutettua tehokkasti koska se on elliptisen käyrän raskaimpia operaatioita.

- SHA1 -tiivistefunktio mielellään valmiina
- Joko valmiina tai helposti tehtävissä : tehokas isojen kokonaislukujen aritmetiikka (alkulukukenttä) / tehokas polynomiaritmetiikka (polynomikenttä)
- hyvät isot näennäissatunnaisluvut

Ehdokkaita:
- C tai C ; voisi olla sinänsä tehokkain, mutta löytyykö ympäristöistä valmiita toimintoja joita voisi hyödyntää, vai pitäisikö kaikki tehdä itse? Valmista C-koodia tosin löytyy lähteistä.
- C# ; miten hankala tämä olisi?
- Java ; suurten lukujen aritmetiikka luokassa java.math.BigInteger ja myös SHA1 luokassa java.security.MessageDigest ja isot satunnaisluvutkin ovat luokkakirjastossa tarjolla
- PHP ; ei ehkä kovin tehokas, mutta peruskokoonpanosta löytyy sha1 ja isojen lukujen aritmetiikan tarjoavat BcMath-funktiot. BcMath taitaa kuitenkin olla melko tehoton ; esim. jos jakolaskussa tarvitaan sekä osamäärä että jakojäännös niin jako on tehtävä tuplana, 2 funktiokutsua.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu