Ich entwickle eine Android-App, und ich muss java Signature
class verwenden für die Datenauthentifizierung.
Auf jedem Android-Gerät kann ich Daten signieren und ihre Signatur verifizieren. Bei einem bestimmten Datenblock zum Unterschreiben, einem bestimmten Modul, einem bestimmten privaten Exponenten und einem eindeutigen öffentlichen Exponenten sind die Ausgaben meiner Signaturen je nach Gerät unterschiedlich. Ich habe es mit einer Reihe von Geräten versucht, und ich erhalte die gleichen Signaturen für Android 3.2 und 3.2.1, aber ein anderes für ein Android 2.2.x-Gerät.
Ich berechne diese Signatur aus konstanten Feldern, die ich zuvor mit einem KeyFactory
mit RSA in einem Java-Projekt generiert habe. Die Schlüsselgröße ist 2048bit.
Hier ist ein Zitat des Codes, den ich benutze, um Signature und Verification anzufordern.
%Vor%Wenn ich mich nicht irre, ist die Signatur mit SHA256 mit RSA deterministisch. Wie kann ich ein solches Verhalten erklären? Eine weitere interessante Frage, wie könnte ich diese Arbeit cross-Geräte machen, d. H. Die Signaturen wären gleich, egal welches Gerät ich verwende?
Vielen Dank im Voraus, Franck!
Ja, SHA256withRSA
ist vollständig deterministisch.
In der Theorie könnten Sie von einem Fehler betroffen sein ( siehe ein Beispiel ) in einer alten modifizierten Version der BouncyCastle-Bibliothek, die in einer der Android-Versionen gefunden wurde. Solch ein Fehler könnte beseitigt werden, wenn Sie stattdessen SHA512withRSA
verwendet hätten, also zumindest die referenzierte.
Bevor Sie jedoch mit dem Hash-Algorithmus beginnen, sollten Sie in der Nähe des Ausgangs nachsehen.
Vielleicht haben Sie Ihr Byte-Array durch einen Aufruf von String.getBytes
erhalten. Dieser Aufruf hängt von der standardmäßigen Plattformcodierung ab, die anders zwischen Android 2.2 und Android ist 2.3. Dies bedeutet, dass die Strings in beiden Fällen identisch sind, die Byte-Arrays jedoch möglicherweise nicht.
Um die Codierung unter Kontrolle zu bekommen und Ihre Code-Plattform unabhängig zu machen, geben Sie die Codierung als Parameter an:
%Vor%Wenn dies nicht gelingt, gibt es ein paar weitere Taktiken, um eine plattformunabhängige Implementierung zu erreichen.
Tags und Links java android rsa digital-signature