Chương 2 : CÔNG NGHỆ THẺ EMV
2.2 VẤN ĐỀ BẢO MẬT TRONG THẺ THÔNG MINH
2.2.1 Các phương pháp cơ bản
2.2.1.1 Tấn công qua kênh phụ
Tấn công qua kênh phụ là phân tích việc tiêu thụ năng lượng. Đây là một biện pháp đặt điện trở cùng seri với thẻ thông minh, điện trở này được đặt giữa thẻ và bề mặt tiếp xúc. Sự khác biệt qua điện trở này sẽ được đo bằng một đầu đọc dao động hoặc đầu đọc chuyên dụng. Thiết bị này sẽ cung cấp việc đo đạc trong mạch điện giữa chip và điện trở.
Các vệt màu xanh trên dao động là năng lượng tiêu thụ hiện tại trong thời gian thực hiện lệnh. Việc mở rộng các vệt xanh này được thể hiện trên màn hình máy tính, trên đó có thể nhìn thấy các điểm cực đại, trung bình và cực tiểu được thể hiện bằng 1 pixel. Đây được coi là việc tiêu thụ năng lượng và các tấn công dựa trên những đo đạc này gọi là tấn công phân tích năng lượng, có hai kiểu chính là:
a) Phân tích năng lượng đơn giản
Đây là việc phân tích của một hoặc sự so sánh của một vài đường tiêu thụ năng lượng. Kẻ tấn công sẽ tìm kiếm các dạng lặp lại và các biến đặc thù đối với kỹ thuật đảo ngược thuật toán được sử dụng và cố gắng lấy được các bí mật bằng các thao tác bằng tay. Hình 2-91 chỉ ra vệt tiêu thụ năng lượng được lấy ra trong quá trình xử lý một AES mà sử dụng thiết bị tương tự với thiết bị trong hình trên, nơi mà 10 vòng của thuật toán DES sẽ được thực hiện. Có thể nhìn thấy một dạng lặp lại 9 lần, với dạng thứ 10 nhỏ hơn nhiều, tương ứng với các vòng của một AES.
Có thể nhận thấy sự khác biệt rất nhỏ trong việc tiêu thụ năng lượng. Bằng cách nhìn cận cảnh vào những khu vực chi tiết, sự khác biệt của 1 hoặc nhiều các chu kỳ đồng hồ có thể được sử dụng xác định các thông tin bí mật. Ví dụ, một chương trình biên dịch có thể thực hiện các phép hoán vị bitwise được sử dụng trong DES theo một cách không bảo mật. Một ví dụ của một thuật toán có thể được tạo ra được đưa ra trong thuật toán I.1, nơi mỗi bit trong buffer X được kiểm tra để xác định liệu rằng một bit trong buffer Y có được tạo lập hay không?
Thuật toán I.1: Hàm nghịch đảo các bit không an toàn
Đầu vào: X = (x0, x1, …, xn-1)2, P[.] chứa chỉ số của phép hoán vị Đầu ra: Y = (y0, y1, …, yn-1)2
1. Y := 0;
2. for i := 1 to n -1
3. if (xP[i] = 1) then yi = 1; 4. return Y
Đây không phải là cách một thực hiện an toàn vì điều kiện thử trong bước 3. Việc tạo lập một bit trong bộ đệm Y sẽ chiếm một lượng thời gian nhất định khi bit được thử trong bộ đệm X bằng 1. Nếu đường tiêu thụ năng lượng trong chức năng này được so sánh với một đường được lấy ra trong quá trình hoán vị một khóa hữu danh, ví dụ tất cả số 0, điểm mà hai đường khác nhau sẽ cho thấy bit được hoán vị đầu tiên sẽ không tương ứng với khóa hữu danh.. Trong trường hợp khi tất cả khóa hữu danh này bằng 0, thì việc tiêu thụ năng lượng phân định vị trí bit được hoán vị của khóa vô danh tương ứng với 1. Do đó tất cả bit trước đó cũng bằng 1. Đường tiêu thụ năng lượng khi đó sẽ bị chuyển đổi để xem xét sự khác biệt về thời gian theo bit này và quá trình này sẽ được lặp lại đối với các khóa tiếp theo.
Người ta có thể tránh được vấn đề này bằng cách thực hiện việc hoán vị bitwise như trong thuật toán I.2, nơi mỗi bit sẽ được lấy một cách riêng rẽ cho buffer X và được chỉ định cho bộ đệm Y. Việc này thường mất nhiều thời gian hơn so với thuật toán I.1 khi mỗi bit được lấy ra từ các máy tương ứng.
Thuật toán I.2: Hàm nghịch đảo các bit an toàn
Đầu vào: X = (x0, x1, …, xn-1)2, P[.] chứa chỉ số của phép hoán vị Đầu ra: Y = (y0, y1, …, yn-1)2
1. for i := 1 to n -1
2. yi := xP[i];
3. return Y End.
Tuy nhiên không phải lúc nào cũng có thể thay đổi một thuật toán theo cách này. Ví dụ, việc mũ hóa môđun được sử dụng trong RSA sẽ là rất khó khăn để chống lại loại tấn công này.
b) Phân tích năng lượng khác biệt:
Trong loại tấn công này, thẻ thông minh buộc phải chạy cùng lệnh với các đầu vào khác nhau. Với mỗi loại đầu vào, việc tiêu thụ năng lượng tương ứng sẽ được nắm bặt và một phân tích được thực hiện dựa trên các dữ liệu được thu thập để tạo ra sự suy luận tiếp theo cho các thông tin bí mật được lưu trữ bên trong thẻ. Những kỹ thuật này đòi hỏi rất nhiều sự thu nhận thông tin hơn là phân tích năng lượng đơn giản, và một lượng nhật định xử lý posteriori
Loại tấn công này dựa trên mối quan hệ giữa việc tiêu thụ hiện thời các dữ liệu hoán vị tại thời điểm nhất định. Sự khác biệt trong việc tiêu thụ hiện thời là rất nhỏ và việc thu nhận thông tin không thể được biên dịch một cách riêng rẽ vì thông tin rất nhỏ nếu so với lượng tiếng ồn thông thường. Có thể nhận thấy những khác biệt này trong hình I.3, và có thể sử dụng DPA để khuếch đại chúng.
Nếu hai đường cong trung bình được đưa ra (một đường ở vị trí tương ứng với 1, đường kia ở vị trí khác), tác động của bit được chỉnh sửa tại thời điểm tiêu thụ năng lượng hiện tại sẽ được nhìn thấy trong sự khác biệt giữa hai đường trung bình này, ví dụ này được thể hiện tại hình I.4. Đỉnh của đường cong này sẽ xuất hiện vào thời điểm bit được sử dụng để chia nguồn thông tin thu được thành hai tập để hoán vị. Điều này xảy ra vì các dữ liệu còn lại được giả định là ngẫu nhiên và do đó sẽ tạo ra một đường trung bình tương tự. Hình I.4 chỉ ra đường DPA mẫu với 5 điểm khác nhau trong thời điểm mà bit được sử dụng để chia thông tin thu thập được để hoán vị.
Loại tấn công này có thể bẻ thuật toán khóa bí mật nếu một kẻ tấn công hình thành một giả thuyết về lối ra của chức năng, ví dụ như một S-box. Kỹ thuật này được sử dụng để xác định giả thuyết khi các đỉnh được thể hiện như trong hình I.4. Giả thuyết này là giống nhau khi tiến hành kiểm tra toàn diện, tuy nhiên kết quả của S-box 1 trong DES phụ thuộc vào 6 bit của khóa bí mật. Do đó kẻ tấn công chỉ cần kiểm tra giả thuyết trên 6 bit để xác định đó là những bit nào. Lúc đó quá trình này có thể được lặp lại đối với mỗi S-box để có được khóa tổng thể.
2.2.1.2 Tấn công dựa vào lỗi (Fault Attacks)
Tấn công vào lỗi là tấn công chủ động, tội phạm phải can thiệp vào thiết bị được tấn công để tạo ra lỗi. Nếu như tội phạm có thể gây ra một sự ảnh hưởng vật lý trên thẻ thông minh, thì hắn có thể gây ra lỗi trên mạch điện hoặc bộ nhớ. Những lỗi này trở nên rõ ràng trong tính toán khí có lỗi. Nếu xuất hiện mội lỗi thì kết quả cuối cùng của lỗi được tính toán. Nếu việc tính toán phụ thuộc vào một số khóa bí mật, thì việc so sánh giữa dữ liệu đúng và dữ liệu bị lỗi có thể cho phép kết luận thực tế về khóa bí mật.
1) Phân loại lỗi
- Lỗi thường xuyên và lỗi tạm thời: một lỗi thường xuyên phá hỏng thiết bị mã hóa theo một cách lâu dài, vì vậy nó sẽ chạy không đúng trong tương lai. Phá hủy đó bao gồm việc làm tê liệt ô nhớ bởi một giá trị cố định,
- Error location: nhiều tấn công yêu cầu khả năng để gây ra lỗi trong một vùng xác định (ô nhớ); những tấn công khác cho phép nhiều sự linh hoạt hơn.
- Thời gian xuất hiện lỗi (Time of occurrence): nhiều tấn công yêu cầu khả năng gây lỗi tại một khoảng thời gian xác định khi tính toán; nhiều tấn công thì không;
- Loại lỗi: nhiều loại lỗi có thể được xem xét như: + flip giá trị của một số bit hoặc của một số byte, + làm tê liệt một ô nhớ là 0 hoặc 1,
2) Giải mã dựa trên lỗi
a) Tấn công trên RSA với CRT
Tấn công lỗi trên RSA với Định lý phần dư Trung hoa (CRT – Chineses Remainder Theorem) là tấn công điển hình của tấn công lỗi.
m là gói tin để ký, n = pq modun bí mật, d: mũ khóa bí mật, e: mũ khóa công khai. Thuật toán 1: CRT mp = m mod p mq = m mod q dp = d mod (p – 1) dq = d mod (q – 1) xp = mdpp modp xq = mqdqmodq
s = chinese(xp, xq) = q(q-1mod p)xp + p(p-1 mod q)xq mod n
return s
Giả sử một lỗi xuất hiện khi tính toán xp hoặc xq