Hallo, ich muss eine RSA-dekodierung (in C) auf einem 32-bit Controller implementieren. Dazu habe ich einen 128Byte großen Public Modulus, den Public exponent und den Private Modulus (auch 128Byte(zum Testen)). Eigentlich ist es ja nicht schwer, wenn die Zahl nicht so groß wäre. Ziel ist es, dass ich einen 128Byte-Array an eine gegenstelle schicke, dieser dort verschlüsselt wird und zurückgeschickt wird und ich es wieder entschlüssle. Dann sollte das selbe herauskomen und die gegenstelle hat sich authentifiziert. Daher wollte ich es erst einmal auf meinem Computer (Windows und Eclipse) umsetzen (da ich hier einfacher debuggen und mir werte ausgeben kann). Habe jetzt zwei implementierungen gefunden (source files), die ich für meine Verwendung verwenden könnte. tiny-bignum https://github.com/kokke/tiny-bignum-c und BearSSL https://bearssl.org/ allerdings habe ich bei keinen von den Beiden genau durchgeblickt, wie es funktioniert. Ich blicke nicht durch, in welcher reihenfolge welche Funktionen aufgerufen werden müssen. Ziel wäre es, wenn ich einen Array codiere und diesen dann wieder decodiere. Dann sollte ja das selbe wieder herauskommen. Die dekodierung wird dann danach auf den Controller umgesetzt. Kenn jemand eine von diesen beide projekten und kann mir einen hinweis geben? Oder hat jemand eine andere lösung wie ich es umsetzen kann? Wie wird es sonst auf Microcontrollern gemacht? Johannes
Johannes schrieb: > und die > gegenstelle hat sich authentifiziert. Es geht Dir also gar nicht ums Verschlüsseln, sondern eigentlich um Authentifizierung, korrekt? Das ist ein bisschen ein anderer Fall. > Wie > wird es sonst auf Microcontrollern gemacht? https://www.microchip.com/wwwproducts/en/atecc508a Hat zusätzlich zur einfacheren Implementation und höheren Geschwindigkeit den großen Vorteil daß man an den privaten Schlüssel nicht so einfach herankommt. Mikrocontroller kann man trotz diverser Fuses und Readout-Protection normalerweise schon noch auslesen lassen, da gibt es in China extra Dienstleister für. Bei so einem Hardware-Crypto-IC ist das natürlich auch möglich, aber ungleich schwieriger. Nachteil ist natürlich daß man der Implementation des Herstellers vertrauen muss und diese nicht selbst verifizieren kann.
Johannes schrieb: > ich muss eine RSA-dekodierung (in C) auf einem 32-bit Controller > implementieren. Warum "mußt" du das? Hausaufgabe? > Eigentlich ist es ja nicht schwer, wenn die Zahl nicht so groß wäre. Ach! > Habe jetzt zwei implementierungen gefunden (source files), die ich für > meine Verwendung verwenden könnte. > > https://github.com/kokke/tiny-bignum-c > > und > > https://bearssl.org/ > > allerdings habe ich bei keinen von den Beiden genau durchgeblickt, wie > es funktioniert. Und? Dann klemm dich dahinter. Lies die Dokumentation. Schau dir die Beispiele dazu an. Oder Anwendungen, die jeweils darauf basieren. > Oder hat jemand eine andere lösung wie ich es umsetzen kann? Wie > wird es sonst auf Microcontrollern gemacht? Krypto mit großen Zahlen verwendet immer irgendeine Bignum Bibliothek. Das ist von der mathematischen/algorithmischen Seite her auch eher trivial. Wenn du auch nur einmal Arithmetik größer als die Wortbreite der ALU implementiert hast (also z.B. 16-Bit Arithmetik auf einem AVR), dann kennst du das Prinzip und kannst das auch mit 128-Bit Zahlen machen. Dauert dann halt länger, aber sonst ist es das Gleiche. Also mach halt, das ist keine Raketenwissenschaft. Am Ende möchte ich trotzdem noch eine Warnung aussprechen: Krypto ist tückisch. Schon der kleinste Fehler kann alles kaputt machen. Geschätzt 99% der Sicherheitslücken in Krypto kommt von Leuten, die "nur mal schnell" für irgendwas Krypto machen mußten. Und dann aber zu bequem waren, es zu verstehen und nur schnell was copy&paste mäßig von Stackoverflow o.ä. verwendet haben. Wenn du dich nicht bei denen einreihen willst, dann mach es ordentlich. Oder laß es ganz.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.