Zum Flashen von verschlüsselten Dateien muss der Schlüssel innerhalb des roloFlash gespeichert werden. Damit dieser nicht von einem anderen Skript auf einer SD-Karte ausgelesen kann, muß auch das auszuführende Skript innerhalb des roloFlash gespeichert und ausgeführt werden.
Dazu empfehlen wir folgenden Ablauf:
Zwar können die Daten auch am PC verschlüsselt werden, allerdings bietet sich hier die Verschlüsselung mit roloFlash an, weil Sie somit sicher sein können, daß Ver- und Entschlüsselung 100%ig zueinander passen. Daher wird hier die Verschlüsselung mit roloFlash demonstriert.
Kopieren Sie ihre zu flashenden Daten auf die SD-Karte und ändern gegebenenfalls noch den Dateinamen, so das er dem 8.3-Format entspricht (z. B. NAME5678.HEX). Wir verwendet ab nun in dieser Dokumentation den Namen “FLASH.HEX”.
Unter ENCRYPT_DATA.BAS
befindet sich ein Skript zum Verschlüsseln von Dateien. Kopieren Sie
dieses Skript auf die SD-Karte, benennen Sie es um in
RUN_V07.BAS
und passen am Anfang der
Datei die Einstellungen an. ERSETZEN SIE UNBEDINGT DEN SCHLÜSSEL DURCH
EIGENE GEHEIME WERTE:
plainFilename = "FLASH.HEX" ! Any file you want to encrypt, for a example
! a hex file.
plainFileSystem = SDCARD ! The filesystem of the given file.
! Can be SDCARD, FLASHVARS or FLASHDISK.
cryptedFilename = "FLASH.CRY" ! The name of the encrypted file to create.
cryptedFileSystem = SDCARD ! The filesystem of the given file.
! Can be SDCARD, FLASHVARS or FLASHDISK.
algo = SEC_AES ! Specify the Crypt Algorithm, here:
width = 256 ! AES with 256 bit in CBC mode, which needs
mode = SEC_CBC ! an additional initialisation vector (iv)
padding = SEC_PKCS7 ! Crypt algorthm is a blockcyper. To
! encrypt/decrpyt the padding algorithm PKCS7
! is recommended.
! A key and an initialisation vector (iv) is needed, REPLACE BY OWN KEY AND IV!
! For AES-256 a 32 Byte bey is needed.
! For CBC mode a 16 Byte initialisation vector is needed.
key = char($b0, $cd, $18, $be, $a5, $66, $92, $49, _
$11, $05, $f6, $29, $34, $18, $27, $12, _
$90, $d0, $71, $ff, $c9, $72, $21, $c2, _
$e4, $d7, $de, $e9, $05, $9e, $b7, $0d, _
$7d, $21, $09, $40, $33, $d4, $a3, $bb, _
$89, $13, $bd, $54, $88, $ea, $3b, $a6, _
$8c, $1a, $c2, $08, $87, $5a, $9b, $01, _
$9a, $1d, $1d, $e5, $50, $ee, $d9, $1f)
iv = char($48, $09, $fc, $c2, $3f, $1d, $a8, $e0, _
$39, $d6, $a8, $8d, $5d, $bb, $f5, $30, _
$2d, $1b, $50, $bf, $57, $38, $9e, $8c, _
$31, $be, $81, $f0, $78, $3e, $bf, $d3)
Rufen Sie den Compiler mit Datei compile_V07.bat auf. Es entsteht die Datei RUN_V07.BIN. Dieses muss nun auf dem roloFlash einmal ausgeführt werden. Nachdem das Skript fertig ist, leuchtet die LED 5 grün. Sie können nun die SD-Karte an den PC anschließen. Als Ergebnis ist jetzt die verschlüsselte Datei FLASH.CRY entstanden.
Speichern Sie die RUN_V07.BAS Datei, die FLASH.HEX Datei und die FLASH.CRY Datei auf Ihrem PC an einem sicheren Ort. Wir schlagen vor in einem Verzeichnis den Ordner encrypt-data anzulegen und dazu zu verwenden.
Auf der SD-Karte befinden sich Vorlagen für verschiedene Controller.
Suchen Sie dort eine für Ihren Controller passende Vorlage aus und
kopieren Sie diese in das Hauptverzeichnis der SD-Karte. Diese Datei
heißt RUN_V07.BAS
.
Passen Sie den genauen Typen gemäß den Bezeichnungen aus dem Handbuch an.
Die zu flashende Datei habe Sie bereits im vorherigen Kapitel auf die SD-Karte kopiert.
Tragen Sie deren Namen in die RUN_V07.BAS ein und rufen Sie den Compiler mit Datei compile_V07.bat auf. Es entsteht die Datei RUN_V07.BIN.
Stecken Sie die SD-Karte in den roloFlash und überprüfen Sie den Flash-Vorgang mit den unverschlüsselten Daten. Wenn dies funktioniert, schließen Sie die SD-Karte an den PC an. Speichern Sie die RUN_V07.BAS-Datei und die RUN_V07.BIN-Datei auf Ihrem PC an einem sicheren Ort. Wir schlagen vor, in einem Verzeichnis den Ordner flash-uncrypted anzulegen und dazu zu verwenden.
Der nächste Schritt ist die Erweiterung Ihres Skripts aus dem vorherigen Kapitel zum Flashen von verschlüsselten Daten.
Sie finden in Ihrem Skript am Anfang einen Block für die Konfiguration. Ändern Sie darin den Namen der zu flashenden Datei auf den Namen der verschlüsselten Datei. Zum Beispiel:
flashFile = "FLASH.HEX"
flashFile = "FLASH.CRY"
Fügen Sie dem Block für die Konfiguration folgendes hinzu und passen es so an, dass es Ihren Einstellungen aus Kapitel 1 entspricht:
algo = SEC_AES ! Specify the Crypt Algorithm, here:
width = 256 ! AES with 256 bit in CBC mode, which needs
mode = SEC_CBC ! an additional initialisation vector (iv)
padding = SEC_PKCS7 ! Crypt algorthm is a blockcyper. To
! encrypt/decrpyt the padding algorithm PKCS7
! is recommended.
! A key and iv is needed, REPLACE BY OWN KEY AND IV FROM CHAPTER 1!
! For AES-256 a 32 Byte bey is needed.
! For CBC mode a 16 Byte initialisation vector is needed.
key = char($b0, $cd, $18, $be, $a5, $66, $92, $49, _
$11, $05, $f6, $29, $34, $18, $27, $12, _
$90, $d0, $71, $ff, $c9, $72, $21, $c2, _
$e4, $d7, $de, $e9, $05, $9e, $b7, $0d, _
$7d, $21, $09, $40, $33, $d4, $a3, $bb, _
$89, $13, $bd, $54, $88, $ea, $3b, $a6, _
$8c, $1a, $c2, $08, $87, $5a, $9b, $01, _
$9a, $1d, $1d, $e5, $50, $ee, $d9, $1f)
iv = char($48, $09, $fc, $c2, $3f, $1d, $a8, $e0, _
$39, $d6, $a8, $8d, $5d, $bb, $f5, $30, _
$2d, $1b, $50, $bf, $57, $38, $9e, $8c, _
$31, $be, $81, $f0, $78, $3e, $bf, $d3)
algoSpec = vari(algo, width, mode)
dataSpec = vari(key, iv, padding)
cryptSpec = vari(algoSpec, dataSpec)
target_writeFromFile targetHandle, SDCARD, flashFile, HEX, FLASH, WRITEVERIFY
target_writeFromFile targetHandle, SDCARD, flashFile, HEX, FLASH, WRITEVERIFY, cryptSpec
Rufen Sie den Compiler mit compile_V07.bat auf. Es entsteht die Datei RUN_V07.BIN.
Entfernen Sie die unverschlüsselte Datei FLASH.HEX von der SD-Karte um sicherzustellen, das diese nicht verwendet werden kann.
Jetzt können Sie die SD-Karte in den roloFlash stecken und den Flash- Vorgang mit verschlüsselten Daten überprüfen.
Wenn dieses funktioniert schließen Sie die SD-Karte an den PC an.
Speichern Sie die RUN_V07.BAS-Datei und die RUN_V07.BIN-Datei auf Ihrem PC an einem sicheren Ort. Wir schlagen vor in einem Verzeichnis den Ordner flash-crypted anzulegen und dazu zu verwenden.
Erstellen Sie auf der SD-Karte einen Ordner „TO-RF“ und verschieben Sie die RUN_V07.BAS-Datei und die RUN_V07.BIN-Datei aus dem vorherigen Kapitel in diesen Ordner.
Unter COPY_TO_FLASHDISK.BAS
befindet sich ein Skript um Ihre
RUN_V07.BIN-Datei vom Ordner „TO-RF“ in die
Flashdisk des roloFlash zu kopieren. Kopieren dieses in das
Hauptverzeichnis der SD-Karte, benennen Sie es um in
RUN_V07.BAS
und übersetzten Sie
diese mittels compile_V07.bat in die Datei
RUN_V07.BIN.
Legen Sie die SD-Karte in den roloFlash und führen das mit Hilfe eines beliebigen Targets einmal aus.
Nehmen Sie eine frische SD-Karte um sicherzustellen, dass keine Geheimnisse vorhanden sind. Bei einem einfachen Löschen aller Daten oder Formatieren können Fragmente Ihrer Daten auf dem Datenträger verbleiben.
Kopieren Sie lediglich die Datei FLASH.CRY auf die SD-Karte. Wir hatten Ihnen dazu im Kapitel 1 vorgeschlagen diesen in einem Verzeichnis auf Ihrem PC im Ordner encrypt-data abzulegen.
Legen Sie die SD-Karte in den roloFlash und testen Sie den Ablauf. Wenn alles funktioniert können Sie diesen roloFlash mit der SD-Karte weitergeben.
#roloFlash 2, v07.*
! ***************************************************************************
! *
! * Sample script for encrypt any file
! *
! * Copyright (C) 2009-2025 by halec embedded solutions
! *
! ***************************************************************************
! For all files on the microSD card, the following applies:
! - File name has to be in 8.3 format
! - File name must contain only CAPITAL LETTERS
! - (see manual, chapter "Files")
! *** Please adapt to your requirements! ***
plainFilename = "FLASH.HEX" ! Any file you want to encrypt, for a example
! a hex file.
plainFileSystem = SDCARD ! The filesystem of the given file.
! Can be SDCARD, FLASHVARS or FLASHDISK.
cryptedFilename = "FLASH.CRY" ! The name of the encrypted file to create.
cryptedFileSystem = SDCARD ! The filesystem of the given file.
! Can be SDCARD, FLASHVARS or FLASHDISK.
algo = SEC_AES ! Specify the Crypt Algorithm, here:
width = 256 ! AES with 256 bit in CBC mode, which needs
mode = SEC_CBC ! an additional initialisation vector (iv)
padding = SEC_PKCS7 ! Crypt algorthm is a blockcyper. To
! encrypt/decrpyt the padding algorithm PKCS7
! is recommended.
! A key and an initialisation vector (iv) is needed, REPLACE BY OWN KEY AND IV!
! For AES-256 a 32 Byte bey is needed.
! For CBC mode a 16 Byte initialisation vector is needed.
key = char($b0, $cd, $18, $be, $a5, $66, $92, $49, _
$11, $05, $f6, $29, $34, $18, $27, $12, _
$90, $d0, $71, $ff, $c9, $72, $21, $c2, _
$e4, $d7, $de, $e9, $05, $9e, $b7, $0d, _
$7d, $21, $09, $40, $33, $d4, $a3, $bb, _
$89, $13, $bd, $54, $88, $ea, $3b, $a6, _
$8c, $1a, $c2, $08, $87, $5a, $9b, $01, _
$9a, $1d, $1d, $e5, $50, $ee, $d9, $1f)
iv = char($48, $09, $fc, $c2, $3f, $1d, $a8, $e0, _
$39, $d6, $a8, $8d, $5d, $bb, $f5, $30, _
$2d, $1b, $50, $bf, $57, $38, $9e, $8c, _
$31, $be, $81, $f0, $78, $3e, $bf, $d3)
! Green running light from LED 1 to LED 2 -> symbolizes script processing
! (LED 5 is kept free for display of "Done")
led_runningLight 1, 2, COLOR_GREEN, 200
! ---- Preparations ----
! Delete old log file, if present
!
f = "LOG.TXT"
if fs_fileExists(0,f)
fs_remove 0, f
endif
! Write software version of roloFlash and script name to LOG.TXT
print "softwareVersion=", sys_softwareVersion, "\r\n"
print "Running script copied from scripts/secureApi/ENCRYPT.BAS\r\n"
!
! ---- A general purpose file encrypt/decrpyt procedure ----
!
procedure copyFileSEC fsSrc, filenameSrc, fsDst, filenameDst, cryptSpec, doEncrypt
fileSizeSrc = fs_fileSize(fsSrc, filenameSrc)
src = fs_open(fsSrc, filenameSrc)
for pass = 0 to 1
if pass = 0
pass = 1
if fsDst <> SDCARD
if doEncrypt
fileSizeDst = (fileSizeSrc and $fffffff0) + 16
elseif cryptSpec[0][2] = SEC_ECB
filePos = fileSizeSrc - 16
a = fs_read(src, filePos, 16)
sec_decrypt a, cryptSpec, SEC_SINGLEBLOCK
fileSizeDst = filePos + size(a)
else
pass = 0
endif
endif
endif
if pass = 1
if fsDst = SDCARD
fs_create fsDst, filenameDst
else
fs_create fsDst, filenameDst, fileSizeDst
endif
dst = fs_open(fsDst, filenameDst)
endif
blockSize = 8192
filePos = 0
do while filePos < filesizeSrc > 0
mySize = blockSize
if mySize > filesizeSrc - filePos
mySize = filesizeSrc - filePos
endif
a = fs_read(src, filePos, mySize)
if filesizeSrc <= blockSize
opState = SEC_SINGLEBLOCK
elseif filePos = 0
opState = SEC_FIRSTBLOCK
elseif mySize >= filesizeSrc - filePos
opState = SEC_LASTBLOCK
else
opState = SEC_NEXTBLOCK
endif
if doEncrypt
sec_encrypt a, cryptSpec, opState
else
sec_decrypt a, cryptSpec, opState
endif
if pass = 1
fs_write dst, filePos, a
endif
filePos = filePos + mySize
loop
if pass = 0
fileSizeDst = fileSizeSrc - 16 + size(a)
endif
next
fs_close dst
fs_close src
end
!
! Build cryptSpec and encrypt
!
algoSpec = vari(algo, width, mode)
dataSpec = vari(key, iv, padding)
cryptSpec = vari(algoSpec, dataSpec)
copyFileSEC plainFileSystem, plainFilename, cryptedFileSystem, cryptedFilename, cryptSpec, 1
! ---- Check for possibly occurred exceptions, write ----
! ---- evaluation to log file and signal it via LEDs ----
catch exception
print "Duration [ms]: ", sys_getSystemTime(), "\r\n"
catch dummyException ! If the last print throws an exception
if exception <> 0
! There has been an error, record the error in LOG.TXT
print "ERROR: Exception ", exception
! Throw exception again, after it has been caught. As a result, the number
! of the exception gets displayed via LED blink codes. The blink codes
! are documented in the manual, chapter "Meaning of LED Codes", subchapter
! "Exception has Occurred"
throw exception
else
! No errors: write to log file and switch LED 5 to green
print "Script ran successfully.\r\n"
led_on 5, COLOR_GREEN
endif
#roloFlash 2, v07+
! ***************************************************************************
! *
! * script for copying:
! * from: SD-card /TO_RF/RUN_V07.BIN
! * to: roloFlash flashDisk RUN_V07.BIN
! *
! * Copyright (C) 2009-2025 by halec embedded solutions
! *
! ***************************************************************************
! Green running light from LED 1 to LED 4 -> symbolizes script processing
! (Data transfer direction: write)
! (LED 5 is kept free for display of "Done")
led_runningLight 1, 4, COLOR_GREEN, 200
! ---- Preparations ----
! Delete old log file, if present
f = "LOG.TXT"
if fs_fileExists(0,f)
fs_remove 0, f
endif
procedure copyFile fsSrc, filenameSrc, fsDst, filenameDst
dataSize = fs_fileSize(fsSrc, filenameSrc)
fs_create fsDst, filenameDst, dataSize
src = fs_open(fsSrc, filenameSrc)
dst = fs_open(fsDst, filenameDst)
blockSize = 512
filePos = 0
do while dataSize > 0
mySize = blockSize
if mySize > dataSize
mySize = dataSize
endif
a = fs_read(src, filePos, mySize)
fs_write dst, filePos, a
filePos = filePos + mySize
dataSize = dataSize - mySize
loop
fs_close dst
fs_close src
end
! -- copy "RUN_V07.BIN" from SD-card (folder TO_RF) to FlashDisk (root folder):
copyFile SDCARD, "TO_RF/RUN_V07.BIN", FLASHDISK, "RUN_V07.BIN"
! ---- Check for possibly occurred exceptions, write ----
! ---- evaluation to log file and signal it via LEDs ----
catch exception
print "Duration [ms]: ", sys_getSystemTime(), "\r\n"
catch dummyException ! If the last print throws an exception
if exception <> 0
! There has been an error, record the error in LOG.TXT
print "ERROR: Exception ", exception
! Throw exception again, after it has been caught. As a result, the number
! of the exception gets displayed via LED blink codes. The blink codes
! are documented in the manual, chapter "Meaning of LED Codes", subchapter
! "Exception has Occurred"
throw exception
else
! No errors: write to log file and switch LED 5 to green
print "Script ran successfully.\r\n"
led_on 5, COLOR_GREEN
endif