German English
Funk

IEEE 802.15.4 - Daten mit AES-ECB verschlüsseln

Eine verschlüsselte Datenübertragung ist bei drahtloser Kommunikation von besonderer Bedeutung. Mit einer Verschlüsselung kann ein unberechtigtes Abhören der Funkschnittstelle und Auswerten der Daten verhindert werden. Ein für die höchste Geheimhaltungsstufe zugelassenes Verfahren ist der Advanced Encryption Standard (AES). Der Algorithmus ist frei verfügbar und darf ohne Lizenzgebühren eingesetzt werden. Das Funkmodul Preon32 von Virtenio enthält eine AES-Implementierung in Hardware, die eine schnelle Bearbeitung von Datenblöcken ermöglicht.
In diesem Beispiel wird ein Datenblock mit der Länge von 16 Byte nach dem AES-ECB-128Bit Verfahren verschlüsselt und wieder entschlüsselt.
/*
 * Copyright (c) 2011., Virtenio GmbH
 * All rights reserved.
 */

package com.virtenio.webdemo;

import com.virtenio.drivers.ieee_802_15_4.AT86RF231;
import com.virtenio.drivers.ieee_802_15_4.NativeAT86RF231;

import java.io.IOException;

public class RadioAESECB {

    public static void main(String[] args) throws IOException {

        NativeAT86RF231 t = NativeAT86RF231.getInstance(0);
        t.open();
        t.setState(AT86RF231.STATE_TRX_OFF);

        byte[] key = {
                0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00,
                0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00
        };

        byte[] data = new byte[]{
                0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
        };

        // AES-ECB Encryption/Decryption with byte-array
        {
            byte[] data_encrypted = new byte[data.length];
            byte[] decryptKey = new byte[16];

            // Set Key
            t.aesSetKey(key);
            t.aesEncryptECB(data, 0, data_encrypted, 0, 16);
            t.aesGetKey(decryptKey);

            byte[] data_decrypted = new byte[data.length];

            t.aesSetKey(decryptKey);
            t.aesDecryptECB(data_encrypted, 0, data_decrypted, 0, 16);
        }
        t.close();
    }
}