密碼庫LibTomCrypt學習記錄——(2.8)分組密碼演算法的工作模式——OFB模式
OFB是一種加密模式。CFB和OFC工作模式中,密碼演算法象流密碼一樣生產出金鑰流供異或名密文用。
參考文獻
- NIST SP 800-38A
- OFB加解密
OFB 加密
I1 = IV;
Ij = Oj -1 for j = 2 … n;
Oj = CIPHK(Ij) for j = 1, 2 … n;
Cj = Pj ⊕ Oj for j = 1, 2 … n-1;
C*n= P*n ⊕ MSBu(On).
OFB 解密
I1 = IV;
Ij = Oj -1 for j = 2 … n;
Oj = CIPHK(Ij) for j = 1, 2 … n;
Pj = Cj ⊕ Oj for j = 1, 2 … n-1;
P*n = C*n ⊕ MSBu(On).
OFB模式
- LibTomCrypt與OFB
LibTomCrypt中與OFB相關的資訊如下:
typedef struct {
int cipher;
int blocklen;
int padlen;
unsigned char IV[MAXBLOCKSIZE];
symmetric_key key;
} symmetric_OFB;
int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_OFB *ofb);
int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb);
int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb);
int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb);
int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb);
int ofb_done(symmetric_OFB *ofb);
──────────────────────────────────────
int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_OFB *ofb);
// [功能] 初始化
- IV // [輸入] 初始化向量
- key // [輸入] 金鑰
- keylen // [輸入] 金鑰長度
- num_rounds // [輸入] 輪數(建議設定為0以便讓系統使用預設值)
- ofb // [輸入/輸出] OFB狀態
──────────────────────────────────────
──────────────────────────────────────
int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb);
// [功能] CBC加密
- pt // [輸入] 明文
- ct // [輸出] 密文
- len // [輸入] 明文密文長度
- ofb // [輸入/輸出] OFB狀態
──────────────────────────────────────
──────────────────────────────────────
int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb);
// [功能] CBC解密
- ct // [輸入] 密文
- pt // [輸出] 明文
- len // [輸入] 明文密文長度
- ofb // [輸入/輸出] OFB狀態
──────────────────────────────────────
──────────────────────────────────────
int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb);
// [功能] 獲取IV值
- IV // [輸出] IV值
- len // [輸出] IV值長度
- ofb // [輸入/輸出] OFB狀態
──────────────────────────────────────
──────────────────────────────────────
int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb);
// [功能] 設定IV值
- IV // [輸入] IV值
- len // [輸入] IV值長度
- ofb // [輸入/輸出] OFB狀態
──────────────────────────────────────
──────────────────────────────────────
int ofb_done(symmetric_OFB *ofb);
// [功能] 完成OFB
- ofb // [輸入/輸出] OFB狀態
──────────────────────────────────────