Archivia i dati crittografati in XML

4

Contesto

Lavoro nel settore energetico con dispositivi che inviano dati in chiaro su un supporto, che alla fine finisce su un computer. I dati sono lì decodificati e archiviati in file XML.

Un file XML corrente che memorizza i dati per un dispositivo è simile al momento:

<Device>
    <Address>1234</Address>
    <SomeOtherParam />
    <Data>
        <Record>
            <Key name="Energy" ... />
            <Value unit="kWh">42.56</Value>
        </Record>
        <Record>
            <Key name="Volume" ... />
            <Value unit="m3">2.317</Value>
        </Record>
        ...
    </Data>
</Device>

Cambia

Ora, con l'emergere dell'IoT, i nuovi dispositivi devono inviare alcune parti dei loro dati crittografati (alcune parti possono comunque rimanere non criptate). Quando i dati raggiungono il computer, è possibile (ma non obbligatorio) che i dati siano ancora crittografati e non possano essere decifrati in questo momento. Tuttavia, ho ancora bisogno di salvarlo in XML per un'ulteriore decrittografia, ma la struttura XML effettiva non è stata progettata per archiviare dati crittografati.

Soluzioni immaginate

Soluzione 1

<Data>
    <Record>
        <Key name="Volume" ... />
        <Value unit="m3">2.317</Value>
    </Record>
    ...
    <EncryptedRecords>4F2B8678...</EncryptedRecords>
</Data>

Soluzione 2

<Data>
    <Decrypted>
        <Record>
            <Key name="Volume" ... />
            <Value unit="m3">2.317</Value>
        </Record>
        ...
    </Decrypted>
    <Encrypted>
        ???
    </Encrypted>
</Data>

Soluzione 3

<Data>
    <Record>
        <Key name="Volume" ... />
        <Value unit="m3">2.317</Value>
    </Record>
    ...
</Data>
<EncryptedData>
    ???
</EncryptedData>

Pensieri personali

  • Soluzione 1: potrebbe fornire una soluzione di lavoro minimalista
  • Soluzione 2: potrebbe interrompere la compatibilità con le versioni precedenti
  • Soluzione 3: cosa dovrebbe sostituire ??? ?

Domanda

Quale sarebbe l'evoluzione ideale della struttura XML per memorizzare i dati crittografati (tieni presente che devo mantenere la compatibilità con le versioni precedenti)?

Ho anche scoperto che il W3C ha già pubblicato una raccomandazione molto tempo fa. Dovrei attenermi a questo? Fondamentalmente, significa che ??? di soluzione 3 potrebbe essere riempito con una struttura raccomandata.

Precisione: questi file XML sono manipolati con JAXB. Se JAXB ha qualche facilitazione con la crittografia, potrebbe essere un vantaggio se la nuova struttura XML è direttamente supportata.

    
posta Spotted 18.03.2016 - 14:21
fonte

2 risposte

2

Un possibile suggerimento: aggiungi un attributo a qualsiasi tag XML.

<Record Encrypted="true">ABNSDJDFGHD</Record>

Poi, durante la lettura, puoi ancora leggere il tag e, in base all'attributo, chiamare una funzione aggiuntiva per decrittografare i dati. L'attributo crittografato può essere aggiunto a qualsiasi tag. La tua attuale struttura XML rimarrebbe la stessa.

    
risposta data 18.03.2016 - 14:41
fonte
1

Il mio suggerimento si basa sulla descrizione che il tuo dispositivo utilizza Wireless Meter Bus via radio che una semplice soluzione che coinvolge il trasporto sicuro probabilmente sarà più problematico di quanto valga. Sembra che in M-Bus (essendo del tutto estraneo a ciò che pensate) sia flessibile in modo tale da poter definire il proprio livello di trasporto in modo tale da implementare qualcosa come Transmission Control Protocol è tecnicamente fattibile. Non ho idea se questo esiste anche e certamente non varrebbe la pena di implementare tutto questo solo per usare qualcosa di prontamente disponibile come certificati SSL e strette di mano per assicurarsi che i dati vengano inviati in modo sicuro da client a dispositivo.

Hai detto che stai usando JAXB quindi presumo che tu abbia un programma Java che può eseguire il marshall, unmarshall XML tramite annotazioni. Il Jasypt Framework si integra perfettamente con JAXB per ottenere la crittografia e la decrittografia di campi specifici attraverso l'uso di adattatori.

Per essere onesti, tuttavia, sono sorpreso che il tuo dispositivo non sia solo Java, ma abbia abbastanza risorse di calcolo per gestire un sistema operativo, il sovraccarico di grandi framework Java come JAXB e può permettersi di comunicare in dati XML dettagliati. La mia risposta presuppone che sia il dispositivo che invia i dati, sia il dispositivo che riceve i dati stiano eseguendo programmi Java con risorse di calcolo sufficienti a loro disposizione in un sistema operativo che sia in grado di farlo.

    
risposta data 18.03.2016 - 14:55
fonte

Leggi altre domande sui tag