Ist in den busyboxen von Peter vorhanden.mktemp: not found
Ist in den busyboxen von Peter vorhanden.mktemp: not found
Das ist korrekt.busyboxen von Peter
signimage
eine neue Version eingecheckt (und zumindest den Zweig bei mir getestet, wenn das mktemp
vorhanden ist auf dem System) - jetzt wird ein fehlendes mktemp
auch emuliert: https://github.com/PeterPawn/YourFritz/commit/f5c6ae0c2e6c567270c4882aba1ca2354b70121ahttpsdl
) so ändern, daß anstelle des main
da ein signimage
in der URL steht (also am Ende zweimal signimage
hintereinander - einmal für den Branch und einmal das Unterverzeichnis).# YF_SIGNIMAGE_OPENSSL=/var/openssl /var/check_signed_image /var/7530_729signed.image -b
Found OpenSSL 1.0.2u 20 Dec 2019
Check dgst command ... OK
Check rsautl command ... OK
The option -b may only be used on a FRITZ!OS device.
sh -x
zwischen der Variablen am Anfang und dem Skript-Namen auf und poste die Ausgabe (ist etwas länger). Sieht so aus, als wäre meine "FRITZ!Box-Erkennung" etwas zu selektiv - die stammt noch aus der Zeit, wo es nur MIPS- und ATOM-Systeme gab bei AVM, die ich im Sinn haben mußte und noch keine ARM-basierten.HWRevision
(im Shell-Environment) und dem Wert im Urlader-Environment (der heißt halt auch HWRevision
) scheitern wird, wenn das auf einer 7520 läuft, wo der Wert aber im FRITZ!OS auf 7530 gesetzt wurde. Kommentiere mal die Zeile 183 in check_signed_image
aus (# in Spalte 1 - die Zeilennummer bezieht sich auf den Branch) und probiere es dann noch einmal.# YF_SIGNIMAGE_OPENSSL=/var/openssl /var/check_signed_image /var/media/ftp/USB-DISKPro-01/7530_729signed.image -b
Found OpenSSL 1.0.2u 20 Dec 2019
Check dgst command ... OK
Check rsautl command ... OK
Trying to determine the correct key now ...
Checking the public key from /etc/avm_firmware_public_key1 ... FAILED
Checking the public key from /etc/avm_firmware_public_key2 ... FAILED
Checking the public key from /etc/avm_firmware_public_key3 ... FAILED
Checking the public key from /etc/avm_firmware_public_key9 ... FAILED
No usable public key was found.
# mount -o bind /etc/avm_firmware_public_key9 /etc/avm_firmware_public_key1
# YF_SIGNIMAGE_OPENSSL=/var/openssl /var/check_signed_image /var/media/ftp/USB-DISKPro-01/7530_729signed.image -b
Found OpenSSL 1.0.2u 20 Dec 2019
Check dgst command ... OK
Check rsautl command ... OK
Trying to determine the correct key now ...
Checking the public key from /etc/avm_firmware_public_key1 ... FAILED
Checking the public key from /etc/avm_firmware_public_key2 ... FAILED
Checking the public key from /etc/avm_firmware_public_key3 ... FAILED
Checking the public key from /etc/avm_firmware_public_key9 ... FAILED
No usable public key was found.
#
Bei einer weiteren 7520 mit (modifizierter und entspr. vorh. eigenem Schlüssel) Ver. 7.28 (7530 Alien) und Update auf (ebenfalls modifizierte und selbst signierte) Ver. 7.29 (ebenfalls 7530 Alien) gab es auch dieses Problem. Da die Box jedoch nicht bei mir ist, steht die weitere/tiefere Diagnose noch aus.
[...] Wenn diesbzgl. neue Erkenntnisse vorhanden sind, folgt Meldung.
openssl
den verwendeten Modulus anzeigen lassen, wenn man den privaten Schlüssel hat. Ich erzeuge unten im ersten Schritt einen neuen, die von mir üblicherweise verwendeten liegen nicht im Home-Verzeichnis - allerdings sollte man das auch nicht so wie gezeigt nachmachen mit dem Generieren, wenn man die "richtigen" Keys dort liegen haben sollte ... außerdem geht es ja um den schon existierenden Key und die Datei im laufenden FRITZ!OS auf der Box. Das openssl rsa
kann man auch auf der Box aufrufen, wenn man es - wie weiter oben gezeigt - von irgendwoher geladen hat - dann muß man nur den privaten Schlüssel auch irgendwie auf die Box bringen (und ihn danach auch wieder löschen).peh@vidar:/tmp/7530_test> /home/GitHub/YourFritz/signimage/generate_signing_key
Found OpenSSL 1.1.1l 24 Aug 2021
Check genrsa command ... OK
Enter a password for the generated key:
Generating RSA key as /home/peh/image_signing.key ... OK
Extracting public key to /home/peh/image_signing.pem ... OK
Extracting public key in AVM format to /home/peh/image_signing.asc ... OK
You should copy the file /home/peh/image_signing.asc to your firmware
image as /etc/avm_firmware_public_key9 to use it for image verification
with AVM components.
peh@vidar:/tmp/7530_test> openssl rsa -in ~/image_signing.key -modulus -noout
Enter pass phrase for /home/peh/image_signing.key:
Modulus=EA8C873373CCB0E92D4ACB811672D1CBA64DC052CAF2FE7DACCF542F69C0FBA4D370527B01AC3EEED2EC8C2E49C0851265CE6CB71E1E9731EC799E1520304399A95F55067BC2C35777BB08F1C6720FFD8A486FC9A46EF7263CD9CC51220B95C142FF0015D6AC8F9C833742B91C70C73E333BF4EB1D6E45E25797F3D43A5829E9
peh@vidar:/tmp/7530_test> cat ~/image_signing.asc
00ea8c873373ccb0e92d4acb811672d1cba64dc052caf2fe7daccf542f69c0fba4d370527b01ac3eeed2ec8c2e49c0851265ce6cb71e1e9731ec799e1520304399a95f55067bc2c35777bb08f1c6720ffd8a486fc9a46ef7263cd9cc51220b95c142ff0015d6ac8f9c833742b91c70c73e333bf4eb1d6e45e25797f3d43a5829e9
010001
peh@vidar:/tmp/7530_test>
avm_firmware_public_key9
vergleichen - aber wenn es da tatsächlich keinen Unterschied geben sollte, dann weiß ich auch keine plausible Erklärung mehr. Gibt es einen Unterschied, bist Du irgendwo bei der Verwaltung der Keys durcheinander gekommen - das würde dann zumindest erklären, warum bei Dir die Verifikation NIE klappt, egal wie groß die signierten Daten auch sind.firmwarecfg stream
ja dennoch nicht stimmt), aber zumindest die Tatsache, daß der zwischenzeitliche Versuch mit der Signatur immer am Beginn eines 10K-Blocks bei Dir auch nicht funktionierte. Aber immer einen Schritt nach dem anderen - jetzt wäre erst einmal der oben gezeigte Vergleich der öffentlichen Schlüssel erforderlich.Vielen Dank dafür, das passt. Signiere die Firmware seit 7.25 mit gleichem Schlüssel.Ich habe die Kommandos und Optionen extra so gewählt, daß man das Protokoll auch problemlos 1:1 zeigen kann,
root@homeserver ~ > openssl rsa -in /root/image_signing.key -modulus -noout
Enter pass phrase for /root/image_signing.key:
Modulus=E79F594B61964B80CA3BCD0B24E8CA8C69A73138EBAC719C1A8861932DDEEA5FE9CA576B8D260FA24F2A9B86578192E3234A2A49B1C5F56B7191DCF5F2F014A5AC8929789E978484DCF9B4F2EC5887D733C6349D735D7F119222A4DA7DDA8CAEB73525F110E4A2CB5FF8387C713E62E18F059871BA10F74B7963F93A86787AAF
root@homeserver ~ > cat /root/image_signing.asc
00e79f594b61964b80ca3bcd0b24e8ca8c69a73138ebac719c1a8861932ddeea5fe9ca576b8d260fa24f2a9b86578192e3234a2a49b1c5f56b7191dcf5f2f014a5ac8929789e978484dcf9b4f2ec5887d733c6349d735d7f119222a4da7dda8caeb73525f110e4a2cb5ff8387c713e62e18f059871ba10f74b7963f93a86787aaf
010001
# for script in check_signed_image sign_image avm_pubkey_to_pkcs8; do httpsdl -n https://raw.githubusercontent.com/PeterPawn/YourFritz/signimage/signimage/$script; chmod a+x $script; ls -l $script; done
ok
-rwxr-xr-x 1 root root 31773 Nov 17 18:22 check_signed_image
ok
-rwxr-xr-x 1 root root 26900 Nov 17 18:22 sign_image
ok
-rwxr-xr-x 1 root root 9103 Nov 17 18:22 avm_pubkey_to_pkcs8
#
# httpsdl -n https://raw.githubusercontent.com/PeterPawn/yf_bin/master/target/armv7l/4.4.60/openssl; chmod a+x openssl; ls -l openssl
ok
-rwxr-xr-x 1 root root 1571524 Nov 17 18:22 openssl
# rm /var/check_signed_image
# cp /var/media/ftp/USB-DISKPro-01/check_signed_image /var
# YF_SIGNIMAGE_OPENSSL=/var/openssl /var/check_signed_image /var/media/ftp/USB-DISKPro-01/7530_728signed.image -b
Found OpenSSL 1.0.2u 20 Dec 2019
Check dgst command ... OK
Check rsautl command ... OK
Trying to determine the correct key now ...
Checking the public key from /etc/avm_firmware_public_key1 ... FAILED
Checking the public key from /etc/avm_firmware_public_key2 ... FAILED
Checking the public key from /etc/avm_firmware_public_key3 ... FAILED
Checking the public key from /etc/avm_firmware_public_key9 ... OK
Checking support for the used hash algorithm md5 ... OK
Verification succeeded.
#
firmwarecfg stream
die Daten (nach der strace
-Ausgabe zu schließen) am Ende mit 4 KB-Blöcken (also nur Faktor 8) ein, aber irgendwie muß AVM beim Berechnen der Anzahl der Blöcke, die da noch an den Hash-Algorithmus zu übergeben sind, wenn die Daten vor der Signatur-Datei alle schon durch sind, einerseits auch von Blockfaktor 20 ausgehen und andererseits irgendwelche Fehler in der Berechnung haben. Ob man dort dann die Prüfung an eine fehlerhafte Signierung angepaßt hat oder umgekehrt, interessiert letztlich gar nicht - ich habe auch keinen Ehrgeiz das Signieren so zu ändern, daß das Skript genauso falsche Images (aus TAR-Format-Sicht) erstellt, wie man sie hin und wieder bei AVM findet.firmwarecfg
zu tun - aber ich weiß nicht mehr genau (und werde aus meinen eigenen Kommentaren auch nur halb schlau), was da der Grund war.tar
auch kein "short read" mehr und erst recht keinen Exit-Code ungleich 0, wie man mit der aktuellen 7530-Firmware (07.29) leicht ausprobieren kann, denn die hat ja gar keine EoA-Marker, wie ich weiter oben gezeigt habe. Damit ist dieser Workaround, wenn er das "short read" verhindern sollte (und einen vielleicht sogar noch davon beeinflußten Exit-Code), ohnehin obsolet.dummy.image
und das ist natürlich auch nur dann sinnvoll, wenn die Größe ohne den zusätzlichen Eintrag zu den kritischen Werten gehört - hier wurde es mit dem zusätzlichen Header dann "Rest=18" anstatt "Rest=17" und das wurde bisher schon richtig behandelt) ja keine Lösung ist, habe ich - wie gesagt - ein paar Änderungen im signimage
-Branch eingecheckt - wenn man die aktuell auscheckt und verwendet, sollte das mit dem touch
nicht mehr erforderlich sein.httpsdl
von AVM mittlerweile auch mit Dateien von GitHub klarkommt, wenn man ihm eine URL ohne weitere Redirections anbietet), wenn es wieder mal irgendwelche Probleme gibt und zu vermuten ist, daß es an der Länge der zu signierenden Daten liegt. Bis ich das habe, bleiben die letzten Änderungen in dem gesonderten Branch stehen und werden noch nicht nach main
übernommen.git clone -b ...
oder nachträglich mit einem git switch signimage
- ansonsten werden erst mal noch die alten Dateien verwendet. Wobei der ganze Branch auch wieder entfernt wird (das gehört nun mal zum Prinzip bei dieser Arbeitsweise), wenn er nach main
gemerged wurde - also darf man das auch nicht "zu fest" verdrahten bei einer zeitweiligen Änderung. Wie schnell ich mit dem Merge am Start bin, kann ich noch nicht sagen.# ./run_signatur_tests
Error downloading binary from https://raw.githubusercontent.com/PeterPawn/yf_bin/master/target/mips/4.9.198/openssl, aborting.
Ja eine 7.27. Ist schon zu neu?wohl eine der neueren für die 7590
openssl
) leeren, bevor man das Skript startet.Ja, wäre sinnvoll. Denn der "Kreuztest" (Update von modifizierter 7.29 auf die gleiche modifizierte 7.29) hatte keine Probleme verursacht.@NDiIPP:
Dann lasse ich diesen Fall erst mal außen vor und tue so, als hätte es ihn nie gegeben. ...