Overview
The Cipher Block Chaining (CBC) mode is a typical block cipher mode of operation using block cipher algorithm.
In this version, we provide Data Encryption Standard (DES) and Advanced Encryption Standard (AES) processing ability,
the cipherkey length for DES should be 64 bits, and 128/192/256 bits for AES.
Another limitation is that our working mode works on units of a fixed size (64 or 128 bits for 1 block),
but text in the real world has a variety of lengths.
So, the last block of the text provided to this primitive must be padded to 128 bits before encryption or decryption.
Implementation on FPGA
We support CBC-DES, CBC-AES128, CBC-AES192, and CBC-AES256 modes in this implementation.
Attention
The bit-width of the interfaces we provide is shown as follows:
|
plaintext |
ciphertext |
cipherkey |
IV |
CBC-DES |
64 |
64 |
64 |
64 |
CBC-AES128 |
128 |
128 |
128 |
128 |
CBC-AES192 |
128 |
128 |
192 |
128 |
CBC-AES256 |
128 |
128 |
256 |
128 |
The algorithm flow chart is shown as follow:
As we can see from the chart, the encryption part of CBC mode has loop-carried dependency which is enforced by the algorithm,
then the input block of each iteration (except for iteration 0) needs a feedback data from its last iteration.
Thus, the initiation interval (II) of CBC encryption cannot achieve an II = 1.
However, the decryption part of CBC mode has no dependencies, so that it can achieve an II = 1.