Ch09

2,597 views
2,516 views

Published on

Published in: Education, Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,597
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
Downloads
384
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • Lecture slides by Lawrie Brown for “Cryptography and Network Security”, 4/e, by William Stallings, Chapter 9 – “ Public Key Cryptography and RSA ”.
  • Ch09

    1. 1. Chương 9: Mã khoá công khai và RSA Fourth Edition by William Stallings Lecture slides by Lawrie Brown
    2. 2. Mã khoá riêng <ul><li>Mã khoá đơn/mật/riêng dùng 1 khoá </li></ul><ul><li>Dùng chung cả người nhận và người gửi </li></ul><ul><li>Khi khoá này được dùng, việc trao đổi thông tin được thỏa thuận. </li></ul><ul><li>Là đối xứng, hai đối tác là như nhau </li></ul><ul><li>Do đó không bảo vệ người gửi khỏi việc người nhận giả mạo mẩu tin và tuyên bố là nó được gủi bằng người gửi. </li></ul>
    3. 3. Khoá mã công khai Public-Key Cryptography <ul><li>Có thể là bước tiến quan trọng nhất trong lịch sử 3000 năm mã hoá </li></ul><ul><li>Sử dụng 2 khoá: khoá riêng và khoá công khai </li></ul><ul><li>Không đối xứng vì hai phía không như nhau </li></ul><ul><li>Sử dụng ứng dụng thông minh của lý thuyết số vào hàm số </li></ul><ul><li>Hỗ trợ thêm chứ không phải thay thế khoá riêng. </li></ul>
    4. 4. Tại sao lại phải dùng mã khoá công khai ? <ul><li>Phát triển hướng tới hai mục tiêu chính </li></ul><ul><ul><li>Phân phối khoá - lám sao có thể phân phối khoá an toàn mà không cần trung tâm phân phối khoá tin cậy </li></ul></ul><ul><ul><li>Chứ ký điện tử - làm sao kiểm chứng được mẩu tin nhận được là của người đứng tên gửi </li></ul></ul><ul><li>Phát minh khoá công khai thuộc về Whitfield Diffie & Martin Hellman ở Đại học Stanford trong năm 1976 </li></ul><ul><li>Được biết đến sớm hơn bởi cộng đồng các nhà khoa học </li></ul>
    5. 5. Public-Key Cryptography <ul><li>Khoá công khai/hai khoá/không đối xừng bao gồm sử dụng 2 khoá: </li></ul><ul><ul><li>Khoá công khai, mà mọi người đều biết, được dùng để mã hoá mẩu tin và kiểm chứng chữ ký. </li></ul></ul><ul><ul><li>Khoá riêng, chỉ người nhận biết, đề giải mã bản tin hoặc để tạo chữ ký. </li></ul></ul><ul><ul><li>Là không đối xứng vì những người mã hoá và kiểm chứng chữ ký không thể giải mã hoặc tạo chữ ký. </li></ul></ul>
    6. 6. Public-Key Cryptography
    7. 7. Các đặc trưng của khoá công khai Public-Key Characteristics <ul><li>Các thuật toán khoá công khai dùng 2 khoá với các đặc trưng </li></ul><ul><ul><li>Không có khả năng tính toán để tìm khoá giải mã nếu chỉ biết thuật toán và khoá mã </li></ul></ul><ul><ul><li>Có thể dễ dàng mã hoá hoặc giải mã mẩu tin nếu biết khoá tương ứng </li></ul></ul><ul><ul><li>Trong một số sơ đồ: một khoá bất kỳ trong hai khoá có thể dùng để mã, còn khoá kia dùng để giải mã </li></ul></ul>
    8. 8. Public-Key Cryptosystems
    9. 9. Ứng dụng khoá công khai Public-Key Applications <ul><li>Có thể phân loại ứng dụng thành 3 loại: </li></ul><ul><ul><li>Mã/giải mã – cung cấp bảo mật </li></ul></ul><ul><ul><li>Chữ ký điện tử - cung cấp xác thực </li></ul></ul><ul><ul><li>Trao đổi khoá </li></ul></ul><ul><li>Một số thuật toán phù hợp với mọi ứng dụng, còn một số chuyên dùng cho ứng dụng cụ thể </li></ul>
    10. 10. Tính an toàn của các sơ đồ khoá công khai <ul><li>Cũng giống như khoá riêng việc tìm kiếm vét cạn luôn luôn có thể </li></ul><ul><li>Nhưng nếu khoá sử dụng là rất lớn (>512 bit) </li></ul><ul><li>Tính an toàn dựa trên sự khác biết đủ lớn giữa các bài toán dễ (mã/giải mã) và bài toán khó khó (thám mã) </li></ul><ul><li>Bài toán khó tổng quát hơn đã được biết đến, nó làm cho rất khó có thể thực hiện trên thực tế. </li></ul><ul><li>Đòi hỏi sử dụng số rất lớn </li></ul><ul><li>Do đó chậm so với mã đối xứng </li></ul>
    11. 11. RSA <ul><li>Được sáng tạo bởi Rivest, Shamir & Adleman ở MIT vào năm 1977 </li></ul><ul><li>Là mã công khai được biết đến nhiều nhất và sử dụng rộng rãi nhất </li></ul><ul><li>Dựa trên lũy thừa trên trường hữu hạn các số nguyên modulo nguyên tố </li></ul><ul><li>Phép lũy thừa cần O((log n) 3 ) phép toán (dễ) </li></ul><ul><li>Sử dụng </li></ul><ul><li>các số rất lớn 1024 bit </li></ul><ul><li>Tính an toàn dựa vào độ khó phân tích ra thừa số các số lớn. Lũy thừa yêu cầu O(e log n log log n ) phép toán (khó) </li></ul>
    12. 12. Khởi tạo khoá RSA <ul><li>Mỗi người sử dụng tạo một cặp khoá công khai – riêng như sau: </li></ul><ul><li>Chọn ngẫu nhiên 2 số nguyên tố lớn p và q </li></ul><ul><li>Tính số làm modulo của hệ thống: N = p.q </li></ul><ul><ul><li>Ta đã biết ø(N)=(p-1)(q-1) </li></ul></ul><ul><ul><li>Và có thể dùng Định lý Trung Hoa để giảm bớt tính toán </li></ul></ul><ul><li>Chọn ngẫu nhiên khoá mã e </li></ul><ul><ul><li>Trong đó 1<e<ø(N), gcd(e,ø(N))=1 </li></ul></ul><ul><li>Giải phương trình sau để tìm khoá giải mã d </li></ul><ul><ul><li>e.d=1 mod ø(N) với 0≤d≤ ø(N) </li></ul></ul><ul><li>In khoá mã công khai P U={e,n} </li></ul><ul><li>Giữ khoá riêng bí mật PR={d,n} hoặc P R={d,p,q} </li></ul>
    13. 13. Sử dụng RSA - RSA Use <ul><li>Để mã hoá mẩu tin, người gủi: </li></ul><ul><ul><li>lấy khoá công khai của người nhận P U={e,n} </li></ul></ul><ul><ul><li>Tính C = M e mod n , trong đó 0≤M<N </li></ul></ul><ul><li>Để giải mã hoá bản mã, người sở hữu nhận: </li></ul><ul><ul><li>Sử dụng khóa riêng PR={d,n} ho ặc P R={d,p,q} </li></ul></ul><ul><ul><li>Tính M = C d mod n </li></ul></ul><ul><li>Lưu ý rằng bản tin M < n, do đó khi cần thì chia nhỏ khối bản rõ. </li></ul>
    14. 14. Cơ sở của RSA Why RSA Works <ul><li>Theo Định lý Ole : </li></ul><ul><ul><li>a ø(n) mod n = 1 where gcd(a,n)=1 </li></ul></ul><ul><li>in RSA have: </li></ul><ul><ul><li>n=p.q </li></ul></ul><ul><ul><li>ø(n)=(p-1)(q-1) </li></ul></ul><ul><ul><li>carefully chose e & d to be inverses mod ø(n) </li></ul></ul><ul><ul><li>hence e.d=1+k.ø(n) for some k </li></ul></ul><ul><li>hence : C d = M e.d = M 1+k.ø(n) = M 1 .(M ø(n) ) k </li></ul><ul><li> = M 1 .(1) k = M 1 = M mod n </li></ul>
    15. 15. Ví dụ RSA- Key Setup <ul><li>Chọn các số nguyên tố : p =17 & q =11. </li></ul><ul><li>Tính n = pq =17 × 11=187 </li></ul><ul><li>3. Tính ø( n )=( p– 1)( q- 1)=16 × 10=160 </li></ul><ul><li>4. Chọn e : gcd(e,160)=1; Lấy e =7 </li></ul><ul><li>5. Xác định d : de= 1 mod 160 và d < 160 </li></ul><ul><li>Giá trị cần tìm là d=23, vì 23 × 7=161= 10 × 160+1 </li></ul><ul><li>6. In khoá công khai KU={7,187} </li></ul><ul><li>7. Giữ khoá riêng bí mật KR={23, 17 , 11} </li></ul>
    16. 16. Ví dụ áp dụng mã RSA trên <ul><li>Cho mẩu tin M = 88 (vậy 88<187) </li></ul><ul><li>Mã C = 887 mod 187 = 11 </li></ul><ul><li>Giải mã M = 11 23 mod 187 = 88 </li></ul><ul><li>Có th ể dùng định lý phần dư Trung Hoa để giải mã cho nhanh như sau: </li></ul><ul><ul><li>Tính 11 23 mod 11 = 0 </li></ul></ul><ul><ul><li>Tính 11 23 mod 17 = (-6) 23 mod 17 = </li></ul></ul><ul><ul><li>= (-6) 16 (-6) 4 (-6) 2 (-6) mod 17 = 3 </li></ul></ul><ul><li>Vì (-6) 2 mod 17 = 2, nên (-6) 4 mod 17 = 4, (-6) 8 mod 17 = -1, </li></ul><ul><li>(-6) 16 mod 17 = 1 </li></ul><ul><ul><li>11 -1 mod 17 = (-6) -1 mod 17 = 14 nên </li></ul></ul><ul><ul><li>c 2 = 11(11 -1 mod 17) = 11 (14 mod 17) = 154 </li></ul></ul><ul><li>Vậy M = (3.154) mod 187 = 462 mod 187 = 88 </li></ul>
    17. 17. Lũy thừa - Exponentiation <ul><li>Cần sử dụng thuật toán bình phương và nhân </li></ul><ul><li>Thuật toán nhanh, hiệu quả cho phép lũy thừa </li></ul><ul><li>Khái niệm được dựa trên phép lặp cơ sở bình phương </li></ul><ul><li>Và nhân để nhận đựơc kết quả </li></ul><ul><li>Xét biểu diễn nhị phân của phép lũy thừa </li></ul><ul><li>Chỉ gồm O(log 2 n) phép nhân đối với số n: </li></ul><ul><ul><li>eg. 7 5 = 7 4 .7 1 = 3.7 = 10 mod 11 </li></ul></ul><ul><ul><li>vì 7 2 = 7.7 = 49 = 5 mod 11 </li></ul></ul><ul><ul><li>7 4 = 7 2 .7 2 = 5.5 = 3 mod 11 </li></ul></ul><ul><ul><li>eg. 3 129 = 3 128 .3 1 = 5.3 = 4 mod 11 </li></ul></ul>
    18. 18. Phân tích lũy thừa theo cơ số 2
    19. 19. Thuật toán lũy thừa Exponentiation <ul><li>Giả s ử b 1 b 2 …b k là biểu diễn cơ số 2 của c. Tính a c mod n </li></ul><ul><li>c = 0; f = 1 </li></ul><ul><li>for i = k downto 0 </li></ul><ul><li>do c = 2 x c </li></ul><ul><li>f = (f x f) mod n </li></ul><ul><li>if b i == 1 then </li></ul><ul><li>c = c + 1 </li></ul><ul><li>f = (f x a) mod n </li></ul><ul><li>return f </li></ul>
    20. 20. Mã hi ệu quả - Efficient Encryption <ul><li>Mã sử dụng lũy thừa của e </li></ul><ul><li>Nếu e nhỏ thì sẽ nhanh </li></ul><ul><li>Thường chọn e=65537 (2 16 -1) </li></ul><ul><li>Xét sự lựa chọn e = 3 hoặc e = 17 </li></ul><ul><li>Nếu e nhỏ thì sẽ bị tấn công </li></ul><ul><ul><li>Sử dụng Định lý phần dư Trung Hoa với các mẩu tin theo các module khác nhau </li></ul></ul><ul><li>Nếu e cố định thì cần tin tưởng rằng </li></ul><ul><li>gcd(e,ø(n))=1 </li></ul><ul><ul><li>Bác bỏ mọi p, q mà không ø(n) nguyên tố cùng nhau với e </li></ul></ul>
    21. 21. Giải mã hi ệu quả Efficient Decryption <ul><li>Giải mã sử dụng lũy thừa của e </li></ul><ul><ul><li>Số mũ lớn, nếu không thì không an toàn </li></ul></ul><ul><li>Có thể sử dụng Định lý phần dư Trung Hoa để tính theo mod p v à q, sau đó kết hợp lại để tìm ra bản rõ </li></ul><ul><ul><li>Nhanh gấp 4 lần nếu tính trực tiếp </li></ul></ul><ul><ul><li>Người giữ khoá riêng biết p v à q nên có thể sử dụng kỹ thuật này </li></ul></ul>
    22. 22. Sinh khoá RSA RSA Key Generation <ul><li>Người sử dụng RSA cần phải </li></ul><ul><ul><li>Xác định ngẫu nhiên 2 số nguyên tố </li></ul></ul><ul><ul><li>Chọn e hoặc d và tính số kia </li></ul></ul><ul><li>Các số nguyên tố p, q không dễ suy ra nếu bíêt tích n = p.q </li></ul><ul><ul><li>Như vậy p, q cần phải là các số đủ lớn </li></ul></ul><ul><ul><li>p, q thường được đoán và qua kiểm tra xác suất số nguyên tố. </li></ul></ul><ul><ul><li>Các số e và d là nghịch đảo nhau, có thể dùng thuật toán nghịch đảo để tính số nọ khi biết số kia. </li></ul></ul>
    23. 23. An toàn của RSA - RSA Security <ul><li>Có các cách tấn công </li></ul><ul><ul><li>Tìm kiếm khoá bằng phương pháp vét cạn (không khả thi với kích thước đủ lớn của các số) </li></ul></ul><ul><ul><li>Tấn công bằng toán học dựa vào độ khó việc tính ø(n) bằng cách phân tích n </li></ul></ul><ul><ul><li>Tấn </li></ul></ul><ul><ul><li>công thời gian (trong khi giải mã) </li></ul></ul><ul><ul><li>T ấn công với bản mã chọn trước </li></ul></ul>
    24. 24. Bài toán phân tích Factoring Problem <ul><li>Tấn công toán học có 3 dạng </li></ul><ul><ul><li>Phân tích n = p.q, sau đó tính ø(n) và d </li></ul></ul><ul><ul><li>Tìm n trực tiếp và tính d </li></ul></ul><ul><ul><li>Tìm d trực tiếp </li></ul></ul><ul><li>Hiện tại tin rằng tất cả đều tưong đương với bài toán phân tích </li></ul><ul><ul><li>Có các bư ớc tiến chậm theo thời gian </li></ul></ul><ul><ul><li>Hiện tại cho rằng RSA 1024 hoặc 2048 là an toàn </li></ul></ul>
    25. 25. Tấn công thời gian Timing Attacks <ul><li>Phát triển vào giữa năm 1990 </li></ul><ul><li>Paul Kocher chỉ ra rằng kẻ thám mã có thể xác định được khoá riêng nếu theo dõi thời gian máy tính cần để giải mã các bản tin. </li></ul><ul><li>Tấn công thời gian không chỉ áp dụng cho RSA, mà cả với các hệ mã công khai khác. </li></ul><ul><li>Tấn công thời gian giống như kẻ cướp đoán sự an toàn bằng cách quan sát một người nào đó trong bao lâu chuyển quay điện thoại từ số này sang số khác. </li></ul>
    26. 26. T ấn công bản mã chọn trước <ul><ul><li>RSA có đi ểm yếu với tấn công bản mã chọn trước </li></ul></ul><ul><ul><li>Kẻ t ấn công chọn bản mã và đoán bản rõ được giải mã </li></ul></ul><ul><ul><li>Chọn bản mã đ ể khám phá RSA cung cấp thông tin để thám mã </li></ul></ul><ul><ul><li>Có thể tính với bộ đệm ngãu nhiên của bản rõ </li></ul></ul><ul><ul><li>Hoặc sử dụng bộ đệm mã hoá phả xứng (OASP) </li></ul></ul>
    27. 27. Summary <ul><li>have considered: </li></ul><ul><ul><li>principles of public-key cryptography </li></ul></ul><ul><ul><li>RSA algorithm, implementation, security </li></ul></ul>

    ×