Dati codificati e decodificati
Per inviare dati su un supporto di comunicazione, ad esempio una linea telefonica, i dati devono essere serializzati, ovvero convertiti in una stringa di uno e zeri trasmessi serialmente sulla linea. La serializzazione deve essere eseguita in modo che il computer che riceve i dati possa riconvertire i dati nel formato originale. Il modo in cui viene eseguita la serializzazione viene chiamata protocollo di comunicazione ed è controllata sia dall'hardware software che dall'hardware di trasmissione dei dati. Esistono diversi livelli in cui i dati vengono convertiti. La figura seguente mostra una visualizzazione notevolmente semplificata dei livelli del protocollo di comunicazione.
La figura precedente mostra il livello applicazione sul computer #1 che invia i dati da trasmettere (che in genere è costituito da una combinazione di caratteri testuali e numeri) al livello di codifica/decodifica. Il livello encode/decode codifica i dati in un flusso di byte del computer. Al livello più basso, il livello hardware, l'hardware converte i byte di dati in un flusso seriale di uno e zeri trasmessi sulla riga al computer n. 2. Il livello hardware del computer n. 2 converte gli zeri e quelli in byte del computer e li passa al livello di codifica/decodifica per la decodifica. Il livello encode/decode decodifica i byte nel formato originale e passa i dati al livello dell'applicazione.
Un principio di progettazione software accettato consiste nell'usare astrazione, ovvero il processo di descrizione di un problema o di un oggetto in termini di parametri generali anziché descrivere tutti i dettagli necessari per risolvere il problema o descrivere tutti i dettagli di un oggetto. Utilizzando l'astrazione, una finestra di progettazione può specificare un oggetto software con qualità specifiche senza preoccuparsi del modo in cui l'oggetto viene effettivamente implementato nel codice software. Tale pratica lascia aperta l'implementazione. Semplifica inoltre la specifica e consente di dichiarare assiomi sull'oggetto che può essere dimostrato quando l'oggetto viene implementato. Questi assiomi possono quindi essere considerati quando l'oggetto viene utilizzato in un altro oggetto di livello superiore. L'astrazione è il segno distintivo della maggior parte delle specifiche del software contemporaneo.
La maggior parte dei protocolli di comunicazione comporta una buona quantità di astrazione. Gli oggetti a livelli superiori vengono definiti in modo astratto e devono essere implementati usando oggetti a livelli inferiori. Ad esempio, un servizio a un livello potrebbe richiedere il trasferimento di determinati oggetti astratti tra computer. Un livello di livello inferiore può usare regole di codifica per trasformare gli oggetti astratti in stringhe di uno e zeri.
Un metodo comune per specificare gli oggetti astratti da trasmettere serialmente è denominato astratta notazione sintassi 1 (ASN.1). ASN.1 è definito nella raccomandazione CCITT X.208. Un set di regole ASN.1 per la rappresentazione di oggetti come stringhe di uno e zeri è denominato regole di codifica distinte (DER) ed è definito nella raccomandazione CCITT X.509, Sezione 8.7. Questi sono i metodi di codifica attualmente usati da CryptoAPI.
Per altre informazioni sulle funzioni di codifica/decodifica, vedere Funzioni di codifica e decodifica degli oggetti .