criptare asimetrică

Anterior, am fost în căutarea pentru microcontroler Liby cu punerea în aplicare a criptare asimetrică, dar nici o piesa nu a fost găsit. Am făcut o greșeală majoră. Am căutat în RuNet! Am fugit în mod constant în poziții în care tryndel că este foarte dificil și microcontrolerul nu va trage. Deci, acest lucru este P *** NIL și trageți chiar avr.

Și bla bla bla. În general, prima în căutarea site-uri în limba engleză nu au avut succes.

Pentru început, am dat peste un valabil, un articol. Aceasta demonstrează RSA-32 de lucru. Prima surpriză, este foarte simplu și lucrări importante. Dar nu demonstrează generarea cheilor.

Am continuat căutarea și a găsit un material adecvat pe wiki. Ar trebui să vedeți, de asemenea, wiki-limba rusă. Există unele capitole foarte cușer.


Furnizarea de canal radio securizată între cele două emisie-recepție. Pentru organizarea unui canal sigur va fi folosit algoritmi RSA-32 și AES-128.

RSA-32 softvarny.
AES-128 hardvarnogo.

scurgeri de date nu va duce la pierderea de bani.

De asemenea, având în vedere lipsa de fiabilitate a tastei 32 de biți, vor fi luate alte măsuri de securitate. Cum ar fi:
  • Setările de emisie-recepție de schimbare constantă;
  • canal de timp limitat de viață;
  • chei statice shifrovaniya.Ih utilizate pot fi obținute numai de la codul sursă sau firmware-ului;
  • chei publice sunt recursiv. Aproape la fel ca și cea a 3DES;
  • recunoaștere / alta.

fiabilitate RSA


Până în prezent, RSA-1024 este în continuare considerată a fi de încredere, cu toate că ultimele sale picioare. Deja încep să se mute la RSA-2048. Acesta este menit să nu algoritmul și lungimea cheii. Există, de asemenea, o vedere faptul de a rupe și nu timpul petrecut pe hacking. Predecesorul RSA-1024 Cluster a rupt un pic peste 4 ani.

Articolul oamenii de știință britanici nu au luat în considerare:
- „off Tăierea degetelor de administrator a condus la RSA-1024 divulgate“
- „Rootkit piratat RSA-1024 prin trimiterea unei chei de rețea privată!“
- „Noi BL ** ciocan Bali pe procesor și a luat o bucată de cheia privată!“
- etc.

RSA-32 a fost mult timp posibil pentru a hack în mai puțin de o zi.

Fiabilitatea poate fi îmbunătățită prin utilizarea:
-procesor crypto. Cel mai probabil sunteți de a lovi în timp ce îndemâna lui. Vanzarea numai sub licență.
-fpga. Dar, în plus față de punerea în aplicare a algoritmului de criptare este în continuare foarte importante generatoare aleatorii și amorse.
-RSA accelerator. Unele ARM se pot lăuda ei. Dar numai 128/256 cheile de biți utilizate în ele. De asemenea, un generator de numere prime numai softvarny.
-utilizați un microcontroler separat. microcontroler puternic trage cu ușurință chei 1024/2048 biți. Utilizarea acestor chei este obligatorie mistui tot timpul procesorului, pentru că este vorba despre milioane de cicluri CPU.

Prin modul în care este realizarea de chei 1024 și 2048 biți pentru AVR! Proiectul este realizat doar pentru distracție. Aceasta demonstrează doar posibilitatea de criptare / decriptare. Nu poate fi utilizat în proiecte reale.

Pe ARM, puteți utiliza tastele de 64 sau chiar 128 de biți (ceea ce înseamnă că microcontrolerul nu numai criptare). Rețineți că există o relație neliniară între timp shivfrovaniya / decriptare și lungimea cheii. De asemenea, există o corelație între dimensiunea mesajului criptat, și lungimea cheii.

punerea în aplicare biți


Acesta nu este un ghid și nu Lieb ca exemplu. Codul este mai bine să ascuți o piatră specifică. Chiar și RSA-32 devora cu ușurință un cuplu de 100K cicluri CPU la balul de 8-tac.

Străinii, am luat următorul cod


El chiar rabotaet.V-l folosește 64 biți matematică și amorse dimensiunea modulului nu trebuie să depășească 32 de biți.
Adevărul este că nu există nici o generație cheie. Aceste funcții am luat Z0MBiE.

pentru că algoritm pentru generarea de numere prime mănâncă o mulțime de timp CPU, am decis să skopipastit tabelul de numere prime în flash și plutesc creierele lor. Mai mult, în timpul accidental tras departe de acolo două numere.

1) După cum se poate observa din articolele pentru a începe să se multiplice două numere prime. În acest caz, rezultatul înmulțirii nu trebuie să depășească 32 de biți. Prin alegerea numere aleatoare în mod responsabil.

exemplu:
p = 59999;
q = 69,073;
m = p * q = 4144310927
50% cheie gata.

2) Selectați exponent deschis. Care îndeplinește condiția.

1 În acest caz, e este ciudat.

Aici este o funcție pentru a găsi cel mai mare divizor comun. Cu aceasta, o verificare pentru a facilita reciproc. Cu drept e returnează 1.


Această funcție returnează exponent secret de


Se va utiliza variabilele semn de 64 biți.
a - expozant deschis
m - este (p-1) * (q-1)

Când a venit valorile mele
publicKey
privateKey
Rezultă că mărimea publicului și privat tasta 8 octet. Puteți alege să trișeze și să deschidă exponentul, astfel încât acesta este întotdeauna egal cu 1mu octet. Apoi, dimensiunea cheii publice este 5T bytes.

Dimensiunea datelor criptate nu trebuie să depășească 2 octeți (estimat la bytes). Ie Mesajul Fracțiune de doi octeți și criptați. Dimensiunea totală a parcelei înmulțită cu 2.

Asta e tot. Și, cel mai important este faptul că funcționează.

Debug algoritm mai bine pe PC și apoi transferat într-un microcontroler.

PS: komenty interzise. Ei nu mă interesează.
PPS: Despre ca ponderala. Numărul de iterații pentru criptare / decriptare invidiez tasta specială. În exemplul (exemplul cheie) de criptare AES128 au consumat 80 iterații și decodare 512. Când se utilizează RSA-64 va trebui să meargă pe mii de iterații.

PPPS: Pe de optimizare.

modexp - toate de intrare / ieșire sunt parametrii pe 32 de biți. Dar interiorul este folosit pentru Cuadratura, deci utilizați un matematica 64 biți.

GCD - privind parametrii de intrare de 32 de biți. La ieșirea de un octet este suficient, dar trebuie să modificați ușor codul funcției.

modinv - intrare / ieșire 32 de parametri de biți. In interiorul foloseste un 64 de biți matematică, și lucrăm cu numere negative.

Și merge fără a fi nevoie de a organiza în mod corect programul. În cazul în care apar numai un singur apel de funcție, în care toate funcțiile inlaynovye. Deci, aveți posibilitatea să salvați o dimensiune mică și de înaltă performanță.