1. Trang chủ
  2. » Cao đẳng - Đại học

Bài giảng Lập trình an toàn: Chương 4 - Lương Ánh Hoàng - Trường Đại Học Quốc Tế Hồng Bàng

10 12 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 2,63 MB

Nội dung

[r]

(1)

Lương  Ánh  Hoàng  

hoangla@soict.hut.edu.vn  

Chương  4  Mã  hóa  đối  xứng  

(2)

4.1  Biểu  diễn  khóa  

4.2  Chuyển  đổi  chuỗi  hexa  và  khóa  nhị  phân   4.3  Mã  hóa  và  giải  mã  Base64    

4.4  Các  phương  pháp  mã  hóa  đối  xứng   4.5  Mã  hóa  đối  xứng  với  OpenSSL  

(3)

•  Khóa  đối  xứng:    Một  số  rất  lớn  sử  dụng  để  mã  hóa  và  giải  mã  thơng  

điệp  

•  Biểu  diễn  khóa:  

•  Phân  tách  thành  các  byte  và  lưu  dưới  dạng  một  mảng  

unsigned  char    key[KEYLEN_BYTES]  

•  Biểu  diễn  dưới  dạng  số  nguyên  lớn  nếu  khóa  có  chiều  dài  64-­‐bit  

long            long              key  

•  Biểu  diễn  dưới  dạng  chuỗi  chữ  số  hexa  

 char  key[]=“AF12B5C7E0…”  

•  Biểu  diễn  dưới  dạng  xâu  ASCII  (mật  khẩu)  

 char  key[]=“secret!!!”  

•  Lưu  ý  về  tính  “endian”  của  máy  thực  hiện  mã  hóa  

4.1  Biểu  diễn  khóa  

(4)

•  Chuyển  đổi  khóa  nhị  phân  sang  dạng  chuỗi  chữ  số  hexa  

 #define  MAX_KEY_LEN  32    unsigned  char  key[MAX_KEY_LEN];    char    result[MAX_KEY_LEN*2+1];    for  (int  i=0;i<MAX_KEY_LEN;i++)  

   sprintf(result+i*2,"%2X",key[i]);    printf("Key:%s",result);  

 

(5)

•  Chuyển  đổi  chuỗi  hexa  sang  khóa  

nhị  phân  

 

char  Hex2Dec(char  c)   {  

         if  (('a'<=c)&&(c<='z'))  return  c  -­‐  'a'+10;            if  (('A'<=c)&&(c<='Z'))  return  c  -­‐  'A'+10;            if  (('0'<=c)&&(c<='9'))  return  c  -­‐  '0';            return  -­‐1;  

}   …  

#define  MAX_KEY_LENGTH  32     char  hexa[]="AF125C4D8E";  

unsigned  char  key[MAX_KEY_LENGTH];   int  keylen  =  strlen(hexa);  

char  c1,c2;  

if  ((keylen%2!=0)||(keylen/2  >    

   

MAX_KEY_LENGTH))  

printf("Invalid  key  length");   keylen  =  keylen/2;  

for  (int  i=0;i<keylen;i++)   {  

 c1  =  Hex2Dec(hexa[i*2]);    c2  =  Hex2Dec(hexa[i*2+1]);    if  ((c1==-­‐1)||(c2==-­‐1))  

 {  

                   printf("Invalid  character  !!!");                      break;  

 };  

 key[i]  =  (c1<<4)|c2;   };  

 

4.2  Chuyển  đổi  chuỗi  hexa  và  khóa  nhị   phân    

(6)

•  Mã  hóa  Base64      

•  Sử  dụng  6-­‐bit  để  mã  hóa  dữ  liệu  và  biểu  diễn  dưới  dạng  các  chữ  cái  ASCII  

•  Cứ  3  byte  dữ  liệu  vào  sẽ  được  biểu  diễn  thành  4  byte  dữ  liệu  ra  

•  Các  ký  tự  ra  nằm  trong  khoảng:    

•  ‘A’  –  ‘Z’  tương  đương  các  giá  trị  của  từ  mã  từ  0-­‐25  

•  ‘a’  –  ‘z’  tương  đương  các  giá  trị  của  từ  mã  từ  26-­‐51  

•  ‘0’-­‐  ‘9’  tương  đương  các  giá  trị  từ  mã  từ  52-­‐61  

•  ‘+’  ,  ‘-­‐’  tương  ứng  với  các  giá  trị  mã  62,63  

•  Nếu  dữ  liệu  vào  có  kích  thước  khơng  chia  hết  cho  3  sẽ  thì  được  thêm  vào  bằng  ký  tự  

‘=‘  

•  VD  

 Dữ  liệu  gốc:  ‘A’  –  0100.0001  

 Dữ  liệu  mã  hóa  dạng  Base64:  010000.010000.000000.000000  ~  QQ==    Dữ  liệu  gốc:  ‘AA’  –  0100.0001.0100.0001  

 Dữ  liệu  mã  hóa  dạng  Base64:  010000.010100.000100.000000  ~  QUE=    Dữ  liệu  gốc:  ‘AAA’  –  0100.0001.0100.0001.0100.0001  

 Dữ  liệu  dạng  mã  hóa  Base64:  010000.010100.000101.000001  ~  QUFB            

           

(7)

•  Mã  hóa  Base64      

       

           

4.3  Mã  hóa  và  giải  mã  Base64  

61  

Value   Char  

   

Value   Char  

   

Value   Char  

   

Value   Char  

0   A   16   Q   32   g   48   w  

1   B   17   R   33   h   49   x  

2   C   18   S   34   i   50   y  

3   D   19   T   35   j   51   z  

4   E   20   U   36   k   52   0  

5   F   21   V   37   l   53   1  

6   G   22   W   38   m   54   2  

7   H   23   X   39   n   55   3  

8   I   24   Y   40   o   56   4  

9   J   25   Z   41   p   57   5  

10   K   26   a   42   q   58   6  

11   L   27   b   43   r   59   7  

12   M   28   c   44   s   60   8  

13   N   29   d   45   t   61   9  

14   O   30   e   46   u   62   +  

(8)

•  Đoạn  chương  trình  mã  hóa  Base64:    P4.5  –  Secure  C  Programming  

Cookbook  

•  Đoạn  chương  trình  giải  mã  Base64:  P4.6  –  Secure  C  Programming  

Cookbook  

(9)

•  Mã  hóa  đối  xứng:  Sử  dụng  chung  một  khóa  cho  mã  hóa  và  giải  mã  

•  Có  hai  loại:  Mã  khối  và  mã  dịng  

•  Có  nhiều  chế  độ  mã  hóa:  ECB,  CBC,  CFB,  OFB,  CTR,  CWC…    

•  Có  nhiều  giải  thuật:  

 

4.4  Các  phương  pháp  mã  hóa  đối  xứng  

63  

Cipher   Key  size   Speed[4]   Implementation   Notes  

AES   128  bits[5]   14.1  cpb  in  asm,  22.6  cpb  in  

C   Brian  Gladman's[6]  

The  assembly  version  currently  works  only   on  Windows  

AES   128  bits   41.3  cpb   OpenSSL  

Triple  DES   192  bits[7]   108.2  cpb   OpenSSL  

SNOW  2.0   128  or  256  bits   6.4  cpb   Fast  reference  

implementation[8]   This  implementation  is  written  in  C  

RC4   Up  to  256  bits  

(usually  128  bits)   10.7  cpb   OpenSSL  

Serpent   128,  192,  or  256  bits   35.6  cpb   Fast  reference  

implementation  

It  gets  a  lot  faster  on  64-­‐bit  platforms  and   is  at  least  as  fast  as  AES  in  hardware  

Blowfish   Up  to  256  bits  

(10)

•  Thư  viện  OpenSSL:  Thư  viện  mã  nguồn  mở,  mạnh  mẽ  và  dễ  sử  dụng  

•  OpenSSL  hỗ  trợ:  

•  Nhiều  thuật  tốn  mã  hóa:  AES,  DES  ,  3DES,  Blow}ish,  CAST,  Idea,  RC2,  RC5  

•  Nhiều  chế  độ  mã  hóa:  ECB,  CBC,  CFB,  OFB,  CTR…  

•  Mã  hóa  dịng:  RC4  

•  Các  giải  thuật  băm:  MD2,  MD4,  MD5,SHA-­‐1,SHA-­‐224,SHA-­‐256…  

•  MAC:  HMAC  MDC2  

•  Các  giải  thuật  mã  hóa  cơng  khai:  DH,  DSA,  RSA,  ECC  

•  Sử  dụng  thư  viện:  

•  Trên  Unix/Linux:  Tải  source  về  và  biên  dịch  Kết  quả  là  }ile    libcrypto.[so/

a],  libssl.[so/a]  và  các  }ile  .h  để  include  vào  chương  trình  

•  Trên  Windows:  Tải  bản  binary  đã  biên  dịch  sẵn:  libeay32.dll,  ssleay32.dll,  

tệp  tiêu  đề  (.h)  và  tệp  thư  viện  (.lib)  Link  http://www.ie7pro.com/

openssl.html  

 

Ngày đăng: 01/04/2021, 16:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w