1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình an toàn: Chương 6 - Lương Ánh Hoàng

17 4 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 3,99 MB

Nội dung

Bài giảng Lập trình an toàn - Chương 6: Mã hóa công khai cung cấp cho người học các kiến thức: Mã hóa với OpenSSL RSA, chữ ký số, biểu diễn khóa, kết nối SSL, hạ tầng khóa công khai. Hi vọng đây là một tài liệu hữu ích dành cho các bạn sinh viên Công nghệ thông tin dùng làm tài liệu học tập và nghiên cứu.

Chương  6  Mã  hóa  cơng  khai   Public  Key  Cryptography   Lương  Ánh  Hoàng   hoangla@soict.hut.edu.vn   Nội  dung   6.1  Mã  hóa  với  OpenSSL  RSA   6.2  Chữ  ký  số   6.3  Biểu  diễn  khóa   6.4  Kết  nối  SSL   6.5  Hạ  tầng  khóa  cơng  khai     102   6.1  Mã  hóa  với  OpenSSL  RSA     •  Mã  hóa  bất  đối  xứng   •  Là  các  giải  thuật  sử  dụng  một  cặp  khóa  cho  việc  mã  hóa  và  giải  mã   •  Dữ  liệu  được  mã  hóa  bằng  khóa  cơng  khai  sẽ  được  giải  mã  bằng   khóa  bí  mật  và  ngược  lại   •  Các  giải  thuật  thông  dụng:  RSA,  DSA,  Dif}ie-­‐Hellman   •  Khơng  sử  dụng  trực  tiếp  để  mã  hóa  dữ  liệu  vì  tốc  độ  rất  chậm   •  Thường  được  sử  dụng  để   •  Trao  đổi  khóa  đối  xứng  trong  phiên  truyền  mật   •  Chữ  ký  số   •  Xác  nhận  danh  tính   •  …   103   6.1  Mã  hóa  với  OpenSSL  RSA     •  OpenSSL  RSA   •  Thường  được  sử  dụng  trao  đổi  khóa   •  Lưu  trữ  tất  cả  thơng  tin  về  một  khóa  dưới  cấu  trúc  RSA   •  Tệp  tiêu  đề  rsa.h   •  Sinh  cặp  khóa  đối  xứng  bằng  hàm       RSA  *RSA_generate_key(int  bits,      //  Kích  thước  khóa:  1024,2048…        unsigned  long  exp,//  Số  mũ:  3,  17,  65537          void  (*cb)(int,  int,  void),    //  Callback        void  *cb_arg);       104   6.1  Mã  hóa  với  OpenSSL  RSA     •  Mã  hóa  với  khóa  cơng  khai   •  Sử  dụng  hàm  RSA_public_encrypt:    int  RSA_public_encrypt(int  l,  //  Chiều  dài  dữ  liệu          unsigned  char  *pt,  //  Xâu/số  cần  mã        unsigned  char  *ct,  //  Kết  quả        RSA  *r,            //  Cấu  trúc  RSA      int  p);          //  Kiểu  padding    Kết  quả  trả  về:  chiều  dài  xâu  mã  được     105       6.1  Mã  hóa  với  OpenSSL  RSA     •  Giải  mã  với  khóa  bí  mật   •  Sử  dụng  hàm  RSA_private_decrypt:    int  RSA_private_decrypt(int  l,            unsigned  char  *ct,          unsigned  char  *pt,          RSA  *r,          int  p);    Kết  quả  trả  về:  chiều  dài  xâu  giải  mã  được   106   6.1  Mã  hóa  với  OpenSSL  RSA     •  Bài  tập   –  Viết  chương  trình  chat  console  client-­‐server  sử  dụng  giải  thuật   RSA  Chỉ  chia  sẻ  public  key  trên  đường  truyền   107   6.2  Chữ  ký  số     •  Chữ  ký  số  dữ  liệu  nhằm  xác  thực  danh  tính  của  người  gửi,  tương  tự    HMAC  nhưng  sử  dụng  giải  thuật  RSA   •  Quá  trình  ký  số  dữ  liệu  nhận  đầu  vào  là  giá  trị  băm  của  thơng  điệp,   khóa  bí  mật  của  người  gửi,  đầu  ra  là  giá  trị  hàm  băm  đã  được  mã  hóa   •  Bên  nhận  thực  hiện  q  trình  ngược  lại:  tính  giá  trị  băm  của  thơng   điệp,  giải  mã  giá  trị  băm  đã  mã  hóa  của  bên  gửi  bằng  khóa  cơng  khai  và   so  sánh  hai  giá  trị  băm  này   •  Hacker  khơng  thể  giả  mạo  giá  trị  băm  vì  khơng  có  khóa  bí  mật  của  bên   gửi   108   6.2  Chữ  ký  số     •  Sơ  đồ  ký   Hash   (SHA1)   Dữ  liệu   Giá  trị  băm   (MD)   Dữ  liệu  +  Chữ   ký   Mã  hóa   Chữ  ký   Khóa  bí  mật   109   6.2  Chữ  ký  số     •  Thực  hiện  bằng  OpenSSL  RSA   –  Hàm  RSA_sign  là  hàm  mức  thấp    của  OpenSSL  thực  hiện  ký  số  dữ  liệu   int  RSA_sign(int  md_type,    //  Loại  Message  Digest:  SHA1,  MD5…    unsigned  char  *dgst,  //  Bản  thân  dữ  liệu  (Message  Digest)    unsigned  int  dlen,            //  Kích  thước    unsigned  char  *sig,        //  Chữ  ký    unsigned  int  *siglen,    //  Chiều  dài  chữ  ký    RSA  *r);                                                      //  Khóa  bí  mật     110   6.2  Chữ  ký  số     •  Thực  hiện  bằng  OpenSSL  RSA   –  Hàm  RSA_verify  thực  hiện  cơng  việc  ngược  lại:  kiểm  tra  tính  hợp  lệ  của  chữ   ký   int  RSA_verify(int  md_type,    //Loại  message  digest:  md5,sha1,…      unsigned  char  *dgst,  //  message  digest    unsigned  int  dlen,            //  kích  thước  message  digest    unsigned  char  *sig,        //  Chữ  ký    unsigned  int  siglen,        //  Chiều  dài  chữ  ký    RSA  *r);                                                    //  Khóa  cơng  khai   •  Thực  hiện  bằng  OpenSSL  DSA   –  Xem  thêm  trong  sách  (phần  7.15)   111   6.3  Biểu  diễn  khóa   •  Biểu  diễn  khóa  và  chứng  thực   –  DER  (Binary)   –  PEM  (Plaintext)   •  Biểu  diễn  DER   –  Chuẩn  quốc  tế  thông  dụng     –  Các  hàm  OpenSSL  tương  ứng:  i2d  và  d2i  (internal  representation  ó  DER)   –  Ví  dụ  chuyển  khóa  cơng  khai  RSA  sang  lưu  trữ  dưới  dạng  DER     unsigned  char  *DER_encode_RSA_public(RSA  *rsa,  int  *len)     {      unsigned  char  *buf,  *next;      *len  =  i2d_RSAPublicKey(rsa,  0);      if  (!(buf  =  next  =  (unsigned  char  *)malloc(*len)))  return  0;    i2d_RSAPublicKey(rsa,  &next);      /*  If  we  use  buf  here,  return  buf;  becomes  wrong  */      return  buf;     }   112   6.3  Biểu  diễn  khóa  cơng  khai     •  Biểu  diễn  DER   –  Ví  dụ  chuyển  khóa  từ  dạng  DER  sang  dạng  khóa  cơng  khai  RSA     RSA  *DER_decode_RSA_public(unsigned  char  *buf,  long  len)    {      return  d2i_RSAPublicKey(0,  &buf,  len);     }   113   6.3  Biểu  diễn  khóa  cơng  khai     •  Biểu  diễn  PEM  (Privacy  Enhanced  Mail)   –  Thực  chất  là  biểu  diễn  DER  dưới  dạng  Base64  và  có  thêm  phần  header,   footer  và  có  thể  mã  hóa   –  Ví  dụ   -­‐-­‐-­‐-­‐-­‐BEGIN  RSA  PRIVATE  KEY-­‐-­‐-­‐-­‐-­‐     Proc-­‐Type:  4,ENCRYPTED     DEK-­‐Info:  DES-­‐EDE3-­‐CBC,F2D4E6438DBD4EA8     LjKQ2r1Yt9foxbHdLKZeClqZuzN7PoEmy+b+dKq9qibaH4pRcwATuWt4/Jzl6y85   NHM6CM4bOV1MHkyD01tFsT4kJ0GwRPg4tKAiTNjE4Yrz9V3rESiQKridtXMOToEp   Mj2nSvVKRSNEeG33GNIYUeMfSSc3oTmZVOlHNp9f8LEYWNmIjfzlHExvgJaPrixX   QiPGJ6K05kV5FJWRPET9vI+kyouAm6DBcyAhmR80NYRvaBbXGM/MxBgQ7koFVaI5   zoJ/NBdEIMdHNUh0h11GQCXAQXOSL6Fx2hRdcicm6j1CPd3AFrTt9EATmd4Hj+D4   91jDYXElALfdSbiO0A9Mz6USUepTXwlfVV/cbBpLRz5Rqnyg2EwI2tZRU+E+Cusb  / b6hcuWyzva895YMUCSyDaLgSsIqRWmXxQV1W2bAgRbs8jD8VF+G9w==     -­‐-­‐-­‐-­‐-­‐END  RSA  PRIVATE  KEY-­‐-­‐-­‐-­‐-­‐   114   6.3  Biểu  diễn  khóa  cơng  khai     •  Biểu  diễn  PEM  (Privacy  Enhanced  Mail)   –  Các  hàm  OpenSSL:   •  Tệp  tiêu  đề       •  PEM_read_***   •  PEM_write_***   –  Ví  dụ  ghi  ra  bộ  nhớ  khóa  bí  mật  RSA  được  mã  hóa  dưới  dạng  PEM  –  AES256-­‐CBC   #include     #include     int  password_cb(char  *buf,  int  len,  int  rwqlag,  void  *cb_arg)   {    strcpy(buf,"hello");    return  strlen(buf);   }   BIO  *  mem  =  BIO_new(BIO_s_mem());   BUF_MEM  *  bp;   BIO_get_mem_ptr(mem,&bp);   PEM_write_bio_RSAPrivateKey(mem,key,EVP_aes_256_cbc(),          0,0,password_cb,0);   115   6.4  Kết  nối  SSL   •  Secure  Socket  Layer  (SSL)  là  giao  thức  ở  tầng  ứng  dụng  cung  cấp  dịch   vụ  kết  nối  an  toàn  giữa  hai  ứng  dụng  trên  cơ  sở  hạ  tầng  khóa  cơng  khai   •  OpenSSL  cung  cấp  SSL  API  để  có  thể  viết  ứng  dụng  SSL  nhanh  chóng   •  http://www.ibm.com/developerworks/linux/library/l-­‐openssl/ index.html#ibm-­‐pcon   •  OpenSSL  common  commands  –  NSA  Cyber  Security   116   6.5  Hạ  tầng  khóa  cơng  khai     •  Sử  dụng  bên  thứ  ba  để  chứng  thực  danh  tính  các  bên   •  Chống  được  hình  thức  tấn  cơng  Man-­‐In-­‐The  Middle   •  Một  số  lệnh  thơng  dụng  với  OpenSSL   –  http://security.ncsa.illinois.edu/research/grid-­‐howtos/usefulopenssl.html   117   ...  và  có  thể  mã  hóa   –  Ví  dụ   -? ?? ?-? ?? ?-? ?? ?-? ?? ?-? ?‐BEGIN  RSA  PRIVATE  KEY-­? ?-? ?? ?-? ?? ?-? ?? ?-? ?‐     Proc-­‐Type:  4,ENCRYPTED     DEK-­‐Info:  DES-­‐EDE 3-? ?‐CBC,F2D4E6438DBD4EA8     LjKQ2r1Yt9foxbHdLKZeClqZuzN7PoEmy+b+dKq9qibaH4pRcwATuWt4/Jzl6y85... zoJ/NBdEIMdHNUh0h11GQCXAQXOSL6Fx2hRdcicm6j1CPd3AFrTt9EATmd4Hj+D4   91jDYXElALfdSbiO0A9Mz6USUepTXwlfVV/cbBpLRz5Rqnyg2EwI2tZRU+E+Cusb  / b6hcuWyzva895YMUCSyDaLgSsIqRWmXxQV1W2bAgRbs8jD8VF+G9w==     -? ?? ?-? ?? ?-? ?? ?-? ?? ?-? ?‐END... b6hcuWyzva895YMUCSyDaLgSsIqRWmXxQV1W2bAgRbs8jD8VF+G9w==     -? ?? ?-? ?? ?-? ?? ?-? ?? ?-? ?‐END  RSA  PRIVATE  KEY-­? ?-? ?? ?-? ?? ?-? ?? ?-? ?‐   114   6. 3  Biểu  diễn  khóa  cơng  khai     •  Biểu  diễn  PEM  (Privacy  Enhanced  Mail)   –  Các  hàm  OpenSSL:   •  Tệp  tiêu

Ngày đăng: 08/05/2021, 14:18

TỪ KHÓA LIÊN QUAN