Tapaya
Chấp nhận thanh toán tại cửa hàngBảo mật thiết bịBảo mật thiết bị

Bảo mật thiết bị

Tìm hiểu cách Tapaya Accept SDK bảo mật giao dịch bằng các bước kiểm tra tính toàn vẹn của thiết bị và bảo vệ dữ liệu, cũng như cách tích hợp và triển khai SDK theo cấu hình sẵn sàng cho production.

Tapaya Accept SDK biến các thiết bị tiêu dùng phổ thông có sẵn trên thị trường (COTS, consumer off-the-shelf) thành máy thanh toán an toàn. Vì các thiết bị này không phải phần cứng thanh toán chuyên dụng, SDK áp dụng các biện pháp bảo mật nghiêm ngặt để giảm thiểu mối đe dọa và đảm bảo tuân thủ các tiêu chuẩn PCI.

Chứng thực thiết bị

Để đảm bảo môi trường thanh toán an toàn, SDK liên tục kiểm tra tình trạng của thiết bị chủ. Nếu phát hiện bất kỳ vi phạm bảo mật nào, SDK sẽ từ chối khởi tạo hoặc xử lý giao dịch.

Phát hiện root và jailbreak

SDK giám sát môi trường để tìm dấu hiệu leo thang đặc quyền. Điều này bao gồm phát hiện các tệp nhị phân root hoặc các framework quản lý đặc quyền như Magisk hay SuperSU. SDK cũng kiểm tra quyền đọc hoặc ghi trái phép vào các thư mục hệ thống được bảo vệ. Ngoài ra, SDK nhận diện các bản build hệ điều hành không chuẩn, bao gồm ROM tùy biến hoặc chữ ký kernel đã bị sửa đổi.

Phát hiện gỡ lỗi

Để ngăn chặn dịch ngược và kiểm thử trái phép, SDK phát hiện xem có debugger nào đang gắn vào ứng dụng hay không và kiểm tra rằng ứng dụng đang chạy trên thiết bị vật lý. Việc thực thi bị hạn chế trong trình giả lập hoặc môi trường ảo.

Google Play Integrity API

Trên Android, SDK sử dụng Play Integrity API để xác nhận rằng tệp nhị phân của thiết bị được Google công nhận và chưa bị can thiệp.

Bảo mật ứng dụng

Làm rối mã

Tapaya Accept SDK sử dụng các kỹ thuật làm rối mã (obfuscation) tiên tiến để giảm nguy cơ bị dịch ngược. Các ký hiệu trong mã được đổi thành định danh không mang ý nghĩa, logic chương trình được cố ý làm khó hiểu, và các chuỗi nhạy cảm hoặc khóa nhúng đều được mã hóa.

Chống can thiệp

SDK tự kiểm tra tính toàn vẹn của chính nó trong lúc chạy. SDK kiểm tra chữ ký số của ứng dụng và của các thư viện SDK. Nếu APK đã bị bên thứ ba sửa đổi hoặc đóng gói lại, SDK sẽ không khởi động được.

Bảo vệ dữ liệu

Mã hóa đầu cuối (E2EE)

Dữ liệu thẻ được mã hóa ngay khi được đọc từ bộ điều khiển NFC. Phương thức mã hóa mạnh theo tiêu chuẩn ngành được sử dụng, và các khóa giải mã chỉ được lưu trong các HSM bảo mật. Thiết bị di động không bao giờ có quyền truy cập vào dữ liệu thẻ thô.

Nhập liệu an toàn

Với các giao dịch dùng PIN, SDK đảm bảo việc nhập liệu an toàn. Màn hình nhập PIN được bảo vệ khỏi các cuộc tấn công bằng lớp phủ, bố cục bàn phím được xáo trộn ngẫu nhiên, và mọi thao tác chạm đều được kiểm tra để xác nhận xuất phát từ thiết bị vật lý.

Giám sát môi trường

Ngăn ghi màn hình

Để bảo vệ dữ liệu nhạy cảm, SDK chặn chụp ảnh màn hình, ghi màn hình và chia sẻ màn hình bằng cách áp dụng các cơ chế hiển thị an toàn trên thiết bị.

Dịch vụ hỗ trợ tiếp cận

Các ứng dụng độc hại thường lạm dụng dịch vụ hỗ trợ tiếp cận (Accessibility Services) để đọc nội dung màn hình hoặc chèn thao tác nhập. SDK phát hiện các dịch vụ hỗ trợ tiếp cận đang hoạt động. Dù SDK cho phép các dịch vụ chuẩn dành cho người khiếm thị (như TalkBack), SDK có thể chặn các dịch vụ không xác định hoặc đáng ngờ trong luồng thanh toán.

Chứng thực và giám sát trong ứng dụng của bạn

Chứng thực và giám sát không phải là một thành phần bạn cài đặt. Chúng được tích hợp sẵn trong Tapaya Accept SDK và trong ứng dụng plugin Tapaya Terminal, khởi động cùng Accept.initialize() và chạy trong suốt thời gian SDK còn hoạt động. Không có cờ cấu hình, không có tùy chọn tắt và không có chế độ nào nới lỏng chúng.

Cả hai phần đều phải vượt qua kiểm tra một cách độc lập. Ứng dụng của bạn chứa SDK, và SDK chuyển mọi khoản thanh toán bằng thẻ cho Tapaya Terminal, ứng dụng này tự chứng thực riêng. Một thiết bị đáp ứng phần này nhưng không đáp ứng phần kia thì không thể nhận thanh toán.

Tích hợp chứng thực vào ứng dụng của bạn

Nghĩa vụThể hiện trong mã như thế nào
Khởi tạo một lần, ngay từ sớmAccept.initialize(context, isProduction = true) trong lớp Application của bạn.
Khai báo đúng môi trường thựcisProduction theo loại bản build, không bao giờ là giá trị hardcode cho tiện.
Giữ Tapaya Terminal được cài đặt và kích hoạtKiểm tra Accept.plugin.isInstalled(), sau đó Accept.plugin.activateTerminal(), trước khi nhận thanh toán.
Coi việc bị từ chối là kết quả cuối cùngBáo cho merchant và dừng lại. Không thử lại và không chuyển sang một nhánh mã khác.

Xem Tích hợp Mobile SDK để biết toàn bộ API đứng sau từng mục trên.

Triển khai theo cấu hình sẵn sàng cho production

Bản build production không được là bản có thể gỡ lỗi (debuggable), không được ghi log và không được làm suy yếu bảo mật đường truyền. SDK tự thực thi phần lớn các yêu cầu này: một bản build có thể gỡ lỗi, hoặc một debugger đang được gắn vào, sẽ khiến SDK hoàn toàn không khởi tạo được.

Thiết lậpPhát triểnProduction
android:debuggabletruefalse
Accept.initialize(isProduction = …)falsetrue
Accept.setDebugLoggingEnabled(…)truefalse
Khóa kýdebug keystorerelease keystore
R8 / ProGuardtắtbật, giữ nguyên các consumer rule của SDK
Cấu hình bảo mật mạngcó thể tin cậy CA do người dùng cài đặtkhông tin cậy CA của người dùng, không bỏ qua pinning
Gỡ lỗi USB trên thiết bịbậttắt

Hãy điều khiển môi trường từ bản build thay vì chỉnh sửa thủ công trước mỗi lần phát hành:

Accept.initialize(context = this, isProduction = !BuildConfig.DEBUG)
Accept.setDebugLoggingEnabled(BuildConfig.DEBUG)

Tuân thủ

Một bản build được phát hành với chế độ gỡ lỗi đang bật, còn để bật log gỡ lỗi hoặc đã bỏ qua certificate pinning là nằm ngoài cấu hình mà Tapaya Accept được chứng nhận, bất kể bản build đó có còn xử lý được thanh toán hay không. Hãy xác nhận từng dòng của bảng trên trước mỗi lần phát hành production.

Điều kiện tiên quyết về nền tảng

Mọi bước kiểm tra ở trên đều phụ thuộc vào một khả năng của thiết bị chủ. Thiết bị được hỗ trợ liệt kê từng yêu cầu, lý do chứng thực cần đến yêu cầu đó và điều gì xảy ra khi thiếu nó. Hai trong số đó quyết định việc lựa chọn phần cứng:

  • Android 11 là mức tối thiểu bắt buộc. Thiết bị dưới mức này hoàn toàn không thể chạy SDK. Một số mẫu SoftPOS chuyên dụng vẫn được xuất xưởng với Android 7 đến 9 và không có đường nâng cấp, vì vậy hãy xác nhận phiên bản hệ điều hành của từng máy cụ thể thay vì của cả dòng sản phẩm.
  • Google Mobile Services là tùy chọn. Khi có GMS, SDK bổ sung kết quả đánh giá của Play Integrity API vào các bước kiểm tra của chính nó. Các máy thanh toán chuyên dụng xuất xưởng không có GMS, phổ biến ở các nhà sản xuất như Sunmi và iMin, được hỗ trợ đầy đủ.

Khi một bước kiểm tra thất bại

Một bước kiểm tra thất bại là kết quả dứt khoát đối với thiết bị đó, không phải lỗi tạm thời để thử lại. SDK từ chối khởi tạo, hoặc từ chối xử lý giao dịch khi vi phạm xuất hiện giữa phiên. Không có gì trong tích hợp của bạn có thể ghi đè điều đó, và việc cố gắng vượt qua nó sẽ đưa hệ thống triển khai của bạn ra ngoài cấu hình đã được chứng nhận.

Hãy xử lý như một lỗi thiết bị không thể khắc phục: thông báo cho merchant rằng thiết bị không thể nhận thanh toán, và hướng họ đến bộ phận hỗ trợ. Không thử lại trong vòng lặp và không chuyển sang một luồng thanh toán khác.

Trách nhiệm của nhà phát triển

Dù SDK đảm nhận phần việc nặng nhất, bạn với vai trò bên tích hợp vẫn phải đảm bảo:

  1. Không tắt các cảnh báo bảo mật: Không cố bỏ qua SSL pinning hoặc cơ chế phát hiện root trong các bản build production.
  2. Luôn cập nhật SDK: Các bản vá bảo mật được phát hành thường xuyên. Đảm bảo ứng dụng của bạn dùng phiên bản mới nhất của Tapaya Accept SDK.
  3. Làm rối mã ứng dụng của bạn: Dùng ProGuard hoặc R8 cho mã ứng dụng của chính bạn để tránh lộ API key hoặc logic tương tác với SDK.
proguard-rules.pro
# The Tapaya Accept SDK includes its own consumer rules, but ensure you do not strip them
-keep class com.tapaya.** { *; }

Báo cáo sự cố bảo mật

Nếu bạn phát hiện một lỗ hổng bảo mật hoặc nghi ngờ có sự cố bảo mật liên quan đến Tapaya Accept SDK hoặc tích hợp của bạn, hãy báo cáo không công khai theo hướng dẫn tại Liên hệ. Hãy gửi kèm phiên bản SDK bị ảnh hưởng và thông tin thiết bị nếu có.

Trang này còn thiếu điều gì?Đề xuất tính năng. Chúng tôi sẽ đính kèm trang này để đội ngũ nắm được bối cảnh.