2.1.1 Khái niệm thẻ thông minh
Thẻ thông minh (smartcard) là một thẻ nhựa được gắn với một con chip máy tính. Con chip này bao gồm một bộ vi xử lý có thể truy cập đến bộ nhớ chỉ đọc (ROM), bộ nhớ có thể ghi bằng tín hiệu điện (EEPROM), và bộ nhớ truy cập ngẫu nhiên (RAM). Đơn vị quản lý bộ nhớ (MMU) điều khiển quá trình truy cập của bộ vi xử lý đến những bộ nhớ đó. Cấu trúc phần cứng của một con chip máy tính được minh họa theo sau:
2.1.2 Phân loại thẻ thông minh
Thẻ thông minh có thể là thẻ tiếp xúc hoặc là thẻ không tiếp xúc; một số thẻ có thể bao gồm cả hai loại tiếp xúc và không tiếp xúc.
- Thẻ tiếp xúc yêu cầu phải có một thiết bị đọc thẻ cho phép liên lạc với thẻ. Loại thẻ này được các tổ chức tài chính và các cơ quan truyền thông chọn lựa để sử dụng phổ biến vì các ưu điểm về giá cả, về các chuẩn và độ bảo mật.
- Thẻ không tiếp xúc thì việc đọc/ghi dữ liệu thẻ không cần phải có một tiếp xúc vật lý. Thẻ có thể được đặt cách máy đọc thẻ vài chục centimet. Tốc độ xử lý của thẻ không tiếp xúc là nhanh hơn so với thẻ tiếp xúc. Vì vậy thẻ không tiếp xúc thường được ứng dụng tại những nơi cần phải xử lý nhanh như các phương tiện công cộng như xe bus, thẻ ra vào... Thẻ không tiếp xúc đắt hơn tiếp xúc nhưng lại không an toàn bằng thẻ tiếp xúc.
- Thẻ lưỡng tính là thẻ kết hợp các đặc điểm của thẻ tiếp xúc, hoặc không tiếp xúc. Dữ liệu được truyền hoặc bằng cách tiếp xúc hoặc không tiếp xúc. Thẻ lưỡng tính đắt hơn rất nhiều so với 2 loại thẻ trên.
2.1.3 Phần cứng của thẻ thông minh
Thẻ thông minh có các điểm tiếp xúc trên bề mặt, bộ xử lý trung tâm bên trong và nhiều dạng bộ nhớ. Một số loại thẻ thông minh có bộ đồng xử lý để cho việc tính toán được thuận lợi
Thẻ thông minh thường gồm ba loại bộ nhớ ROM, EEPROM, RAM. - ROM (bộ nhớ chỉ đọc) được dùng để lưu trữ các chương trình như hệ điều hành, các dữ liệu cố định của thẻ. Nó có thể lưu trữ dữ liệu khi nguồn đã tắt và không thể ghi lại sau khi thẻ đã được sản xuất.
- EEPROM (bộ nhớ chỉ đọc có thể có thể lập trình bằng tín hiệu điện) - RAM (bộ nhớ truy cập ngẫu nhiên): dùng để lưu trữ những thông tin cần xử lý nhanh nhưng mang tính tạm thời, không lưu lại được khi tắt nguồn.
Chip tiếp xúc với bên ngoài thông qua năm điểm tiếp xúc sau:
- I/O: được dùng để chuyển dữ liệu và lệnh giữa thẻ thông minh và thế giới bên ngoài theo chế độ bán song công.
- Vα và GND: hiệu điện thế cho chip được cung cấp bởi thiết bị đọc trên hai điểm tiếp xúc.
- CLK: thực hiện tất cả những xử lý trong chip được đồng bộ hóa với một đồng hồ nhận được từ thiết bị đọc.
2.1.4 Hệ điều hành của thẻ thông minh
Hiện nay hầu hết thẻ thông minh đều có hệ điều hành. Đối với thẻ thông minh sử dụng chip vi xử lý thì cũng giống như máy tính cá nhân (PC), cần có hệ điều hành để quản lý, thực thi các ứng dụng và trao đổi dữ liệu với thiết bị đọc thẻ. Hiện tại trên thị trường có những loại hệ điều hành sau hỗ trợ đa ứng dụng là:
- Java card - thẻ thông minh có thể chạy một chương trình Java
- Multos - hệ điều hành riêng, được tổ chức thẻ quốc tế Master chấp nhận - Hệ điều hành Windows cho thẻ thông minh
- Open platform.
2.1.5 Truyền dữ liệu trong thẻ thông minh
Thẻ thông minh và máy chủ quản lý thẻ thông minh giao tiếp với nhau thông qua một thiết bị chấp nhận thẻ. Thiết bị này có thể là đầu đọc thẻ và thiết bị đầu cuối (terminal). Ta có thể thấy các thiết bị đầu cuối như các điểm bán hàng, máy rút tiền tự động ATM. Thiết bị đầu cuối có khả năng xử lý dữ liệu truyền giữa nó và thẻ thông minh cũng như xử lý và truyền dữ liệu về máy chủ quản lý thẻ thông minh.
Truyền thông giữa thẻ thông minh và máy chủ là bán song công, dữ liệu chỉ có thể truyền từ thẻ đến máy chủ hoặc từ máy chủ đến thẻ chứ không thể theo hai hướng cùng một lúc. Thẻ thông minh tương tác với máy tính bằng cách sử dụng các gói tin riêng của nó – được gọi là APDUs. Một APDU chứa một lệnh hoặc một thông điệp trả lời. Thẻ thông minh đóng vai trò thụ động trong mô hình chủ - tớ với máy chủ. Nó đợi lệnh APDU từ máy chủ. Sau đó thực hiện chỉ thị trong lệnh và trả lời máy chủ với APDU phản hồi. Các lệnh APDU và APDU-phản hồi được truyền đan xen giữa máy chủ và thẻ.
2.1.5.1 Cấu trúc của APDU
APDU là một giao thức ở mức ứng dụng giữa thẻ thông minh và ứng dụng của máy chủ. Các thông điệp APDU gồm hai loại cấu trúc: một được sử dụng bởi ứng dụng của máy chủ từ phía thiết bị chấp nhận thẻ để gửi lệnh đến thẻ và một được sử dụng bởi thẻ để gửi thông điệp trả lời ứng dụng của máy chủ. Tương ứng với chúng là hai lớp ADPU lệnh (C-APDU) và APDU phản hồi (R-APDU). Một C-APDU luôn có R-APDU tạo thành cặp tương ứng.
a) Cấu trúc của APDU lệnh
Tiêu đề của APDU lệnh gồm 4 byte: CLA (―lớp‖ chỉ thị), INS (―mã‖ chỉ thị), P1, P2 (tham số 1 và 2). Byte CLA xác định loại ADPU lệnh và APDU phản hồi. Byte ―INS‖ xác định chỉ thị của lệnh. Hai tham số P1 và P2 xác định thêm thông tin cho chỉ thị. Lc-Feld xác định độ dài trường dữ liệu theo byte.
Phần tiêu đề trong APDU lệnh là phần tùy chọn chi tiết có độ dài thay đổi. Trường dữ liệu chứa dữ liệu truyền đến thẻ để thực hiện lệnh được chỉ rõ trong Tiêu đề của APDU. Byte Le-Feld chỉ ra số byte mà máy chủ chờ thẻ phản hồi.
b) APDU phản hồi
APDU phản hồi được gửi bởi thẻ để trả lời cho APDU lệnh, bao gồm một chi tiết tùy chọn và phần bắt buộc kèm theo. Phần chi tiết bao gồm trường dữ liệu có độ dài được xác định bởi trường Le-Feld trong APDU lệnh tương ứng. Phần bắt buộc bao gồm hai trường SW1 và SW2, đi cùng với nhau được gọi là từ trạng thái, biểu thị trạng thái xử lý của thẻ sau khi thực hiện APDU lệnh.
2.1.5.2 Mã hóa bit
Mã hóa bit trực tiếp hay đảo bit đều được dùng trong thẻ thông minh Trực tiếp (xuôi thứ tự)
2.1.5.3 Giao thức TPDU
APDU được truyền bởi giao thức mức tiếp theo – giao thức truyền thông. Cấu trúc dữ liệu được trao đổi giữa máy chủ và thẻ sử dụng giao thức truyền thông được gọi là giao thức truyền thông đơn vị dữ liệu (Transport Protocol Data Unit - TPDU). Hai giao thức truyền thông được dùng chủ yếu trong các hệ thống thẻ thông minh hiện nay là T = 0 và T = 1.
Giao thức T = 0 là giao thức hướng byte, có nghĩa là đơn vị nhỏ nhất được xử lý và truyền đi bởi giao thức là một byte. Giao thức T = 1 là hướng khối, tức là một khối gồm một số byte liên tiếp, là đơn vị dữ liệu nhỏ nhất có thể truyền giữa thẻ và máy chủ.
Cấu trúc TPDU được dùng trong giao thức T = 0 và T = 1 là khá khác nhau. T= 0 là giao thức truyền ký tự bán song công không đồng bộ. Hầu hết các thẻ thông minh sử dụng giao thức T =0. T = 1 là giao thức truyền khối dữ liệu bán song công không đồng bộ. Thẻ có thể hỗ trợ cả hai giao thức này, khi đó thiết bị đầu cuối sẽ lựa chọn giao thức nào được sử dụng.
2.1.5.3 Thông điệp trả lời để xác lập lại (ATR)
Ngay sau khi bật nguồn, thẻ thông minh gửi thông điệp trả lời để xác lập lại (answer to reset –ATR) tới máy chủ. Thông điệp này truyền tới máy chủ các thông số yêu cầu bởi thẻ để thiết lập kênh kết nối truyền dữ liệu. ATR có thể có từ 2 đến 33 byte. Byte đầu tiên định nghĩa kiểu mã bit (trực tiếp hay đảo ngược). ATR còn chứa các tham số truyền tín hiệu như giao thức truyền thông được thẻ hỗ trợ (T=0 hoặc T =1), tốc độ truyền dữ liệu, các tham số phần cứng của thẻ như số thứ tự chip, phiên bản làm mặt nạ cho chip, nhà sản xuất…
2.1.6 Các chuẩn trong thẻ thông minh
1. ISO 7816-1: Những đặc điểm vật lý - định nghĩa kích thước vật lý của thẻ tiếp xúc và điện trở của chúng. Nó cũng mô tả vị trí vật lý của dải băng từ, khu vực dập nổi.. của thẻ chip.
2. ISO 7816-2: Kích thước và khu vực tiếp xúc - định nghĩa khu vực, mục đích và những đặc điểm điện trở kim loại tiếp xúc của thẻ
3. ISO 7816-3: Tín hiệu điện và những giao thức truyền - định nghĩa điện thế và những yêu cầu hiện tại (giao thức T = 0 như chuẩn; T = 1 yêu cầu sẵn có; T = 14 được sử dụng ở Nhật).
4. ISO 7816-4: Lệnh sẵn có để trao đổi - thiết lập tập lệnh cho CPU của thẻ across all industries to cung cấp truy cập, bảo mật và truyền dữ liệu thẻ. 5. ISO 7816-5: Hệ thống số và thủ tục đăng ký cho định danh của ứng dụng
- thiết lập chuẩn cho định danh của ứng dụng (AID).
6. ISO 7816-6: Thành phần dữ liệu có sẵn bên trong - trình bày chi tiết thiết bị truyền vật lý và dữ liệu truyền, hỏi và khởi tạo lại (ATR) và giao thức truyền.
2.1.7 Ứng dụng trong thẻ thông minh
Ví dụ
- Tín dụng/ghi nợ (ví dụ thẻ EMV)
- Ví điện tử (ví dụ như thẻ rút tiền mặt của Incombank)
- Quà tặng
- Kiểm soát truy cập
- Chứng minh thư
- Vé xe bus
- Thẻ bảo hiểm ý tế
Đa ứng dụng
- Kết hợp những ứng dụng bên trên vào thành một như kết hợp số chứng minh nhân dân, thẻ bảo hiểm, ví điện tử...
2.2 VẤN ĐỀ BẢO MẬT TRONG THẺ THÔNG MINH
Các phương pháp tấn công có thể chia làm ba loại: tấn công ở mức độ xã hội (social level), tấn công ở mức độ phần cứng (physical level), và tấn công ở mức độ logic (logic level).
- Những tấn công ở mức độ xã hội chủ yếu liên quan đến những người làm việc hoặc sử dụng thẻ thông minh. Ví dụ như người thiết kế thẻ có thể cung cấp những thông tin quan trọng về cấu tạo của mạch, mạng…Các thông tin bí mật có thể bị mất do người sử dụng thẻ, ví dụ như số PIN của chủ thẻ có thể bị lộ khi nhập PIN trên bàn phím của máy rút tiền.
- Những tấn công logic dựa vào những suy luận logic liên quan đến các thuật toán mã hóa. Ví dụ các phương pháp giải mã.
- Những tấn công ở mức độ phần cứng đòi hỏi các thiết bị hiện đại để có thể xâm nhậm vào các vi mạch của thẻ. Dựa vào mức độ xâm nhập vào thẻ, có thể chia tấn công này làm ba loại sau:
1) Tấn công xâm nhập (invasive attack): lớp bảo vệ của mạch sẽ bị phá bỏ, các kỹ thuật xử lý ảnh được sử dụng để quan sát các lớp và cấu trúc mạch, các tiếp xúc điện được kết nối và bộ nhớ của thẻ sẽ bị đọc. Cách tấn công này đòi hỏi những thiết bị hiện đại, chính xác, thường chỉ có ở những phòng thí nghiệm lớn.
2) Tân công nửa xâm nhậm (semi-invasive attack): khác với tấn công xâm nhập, trong loại tấn công này các mạch điện không được kết nối. Ví dụ như việc dùng tia laser chiếu vào mạch để mạch hoạt động không bình thường. Qua việc xử lý những kết quả không bình thường đó, ta có thể dò được một số thông tin bí mật.
3) Tấn công không xâm nhập (non-invasive attack): không đòi hỏi bất cứ một sự xâm nhập trực tiếp nào vào thẻ. Ví dụ của loại tấn công này là tấn công qua kênh phụ (side channel attack). Người tấn công sẽ tìm cách đo tín hiệu của
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