Triển khai tính năng tạo địa chỉ MAC ngẫu nhiên

Kể từ Android 8.0, các thiết bị Android sẽ sử dụng địa chỉ MAC ngẫu nhiên khi dò tìm mạng mới trong khi không liên kết với mạng. Trong Android 9, bạn có thể bật một lựa chọn dành cho nhà phát triển (theo mặc định, lựa chọn này sẽ tắt) để khiến thiết bị dùng địa chỉ MAC ngẫu nhiên khi kết nối với mạng Wi-Fi.

Trong Android 10, tính năng tạo địa chỉ MAC ngẫu nhiên được bật theo mặc định cho chế độ máy khách, SoftAp và Wi-Fi Direct.

Tính năng ngẫu nhiên hoá địa chỉ MAC ngăn chặn các thiết bị nghe sử dụng địa chỉ MAC để tạo nhật ký hoạt động của thiết bị, nhờ đó tăng cường quyền riêng tư của người dùng.

Ngoài ra, địa chỉ MAC được tạo ngẫu nhiên trong các hoạt động Nhận biết Wi-FiRTT Wi-Fi.

Để biết thêm thông tin, hãy xem phần Hành vi ngẫu nhiên của địa chỉ MAC.

Triển khai

Cách triển khai tính năng sắp xếp ngẫu nhiên địa chỉ MAC trên thiết bị:

  1. Hợp tác với nhà cung cấp chip Wi-Fi để triển khai các phương thức HAL sau:

    • IWifiStaIface#setMacAddress: Định cấu hình địa chỉ MAC của giao diện. Cách triển khai mặc định sẽ tắt giao diện, thay đổi địa chỉ MAC và bật lại giao diện.
    • IWifiStaIface#getFactoryMacAddress: Lấy địa chỉ MAC ban đầu của wlan0 bằng lệnh gọi ioctl.
    • ISupplicantP2pIface#setMacRandomization: Bật/tắt tính năng ngẫu nhiên hoá địa chỉ MAC P2P trong ứng dụng hỗ trợ.
  2. Đặt config_wifi_connected_mac_randomization_supported thành true trong phần Cài đặt config.xml (bạn có thể thực hiện việc này trong lớp phủ tuỳ chỉnh của thiết bị).

    • Cờ này dùng để kiểm soát việc có bật tính năng tạo địa chỉ MAC ngẫu nhiên ở chế độ máy khách hay không.
  3. Đặt config_wifi_p2p_mac_randomization_supported thành true trong phần Cài đặt config.xml (bạn có thể thực hiện việc này trong lớp phủ tuỳ chỉnh của thiết bị).

    • Cờ này dùng để kiểm soát việc có bật tính năng ngẫu nhiên hoá địa chỉ MAC Wi-Fi Direct hay không.
  4. Kiểm thử việc triển khai bằng các phương thức được mô tả trong phần Xác thực.

Giao diện người dùng hệ thống phải:

  • Có lựa chọn bật hoặc tắt tính năng ngẫu nhiên hoá cho từng SSID.
  • Bật chế độ tạo địa chỉ MAC ngẫu nhiên theo mặc định cho tất cả các mạng mới được thêm.

Sử dụng quy trình triển khai tham chiếu của giao diện người dùng Cài đặt để triển khai các lời nhắc mới.

Các thiết bị chạy Android 9 trở xuống có thể không hỗ trợ tính năng ngẫu nhiên hoá địa chỉ MAC Wi-Fi. Khi nâng cấp những thiết bị như vậy lên Android 10, bạn có thể tắt tính năng tạo địa chỉ MAC ngẫu nhiên của Wi-Fi bằng cách đặt cờ WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION thành true trong tệp make HAL của nhà cung cấp Wi-Fi.

Xác nhận kết quả

Để xác thực rằng tính năng này hoạt động như dự kiến, hãy chạy một thử nghiệm thủ công:

  1. Xác minh rằng tính năng ngẫu nhiên hoá địa chỉ MAC đã được bật trên thiết bị bằng cách kiểm tra để đảm bảo config_wifi_connected_mac_randomization_supported được đặt thành true trong lớp phủ thiết bị.
  2. Kết nối với mạng Wi-Fi.
  3. Nhấn vào mạng truyền hình để chuyển đến trang Chi tiết mạng truyền hình. Xác minh rằng bạn đã bật tính năng ngẫu nhiên hoá địa chỉ MAC. Xác minh rằng địa chỉ MAC hiển thị là địa chỉ MAC ngẫu nhiên, có bit được tạo cục bộ được đặt thành 1 và bit truyền tin đa hướng được đặt thành 0.
  4. Tắt tính năng gán địa chỉ MAC ngẫu nhiên. Kết nối với cùng một mạng và xác minh rằng địa chỉ MAC gốc đang được sử dụng.
  5. Xoá mạng bằng cách nhấn vào Xoá trên trang Chi tiết mạng.
  6. Kết nối với cùng một mạng và xác minh rằng bạn đang sử dụng cùng địa chỉ MAC ngẫu nhiên.

Để kiểm thử tính năng ngẫu nhiên hoá địa chỉ MAC trên một thiết bị chạy phiên bản Android trước 10 (có khả năng hỗ trợ tính năng ngẫu nhiên hoá địa chỉ MAC) nâng cấp lên Android 10 trở lên:

  1. Có ít nhất một mạng đã lưu trên thiết bị chạy Android 9 trở xuống.
  2. Cài đặt ROM hình ảnh hệ thống Android 10.
  3. Trong trình chọn Wi-Fi, hãy xác minh rằng tính năng sắp xếp ngẫu nhiên MAC đã tắt đối với tất cả các mạng đã lưu.
  4. Bật chế độ ngẫu nhiên hoá địa chỉ MAC. Kết nối với cùng một mạng và xác minh rằng MAC ngẫu nhiên đang được sử dụng.