Mã hóa lại EEPROM: mật khẩu và cơ chế
Nhận thức mấu chốt rút ra từ nhiều năm thảo luận kỹ thuật: khả năng tương thích của transceiver không nằm ở firmware — mà nằm ở các chuỗi nhận dạng trong EEPROM, được đọc qua I²C. Một switch từ chối một module chỉ đơn giản vì nó không nhận ra chuỗi nhà sản xuất. Chỉ riêng sự thật đó đã giải thích cho thói quen phổ biến “mã hóa mọi thứ thành Cisco — hầu như ở đâu cũng chạy được” và toàn bộ thị trường công cụ mã hóa.
Mật khẩu nằm ở đâu
Việc ghi vào các vùng được bảo vệ của bộ nhớ module cần một mật khẩu 4 byte được nhập tại một địa chỉ cố định trước khi ghi:
| Loại module | Khối bộ nhớ | Offset mật khẩu |
|---|---|---|
| SFP / SFP+ | A2h (địa chỉ I²C 0x51) | 0x7B–0x7E |
| QSFP / XFP | A0h | 0x7B |
Các mật khẩu thường gặp
| Mật khẩu | Ghi chú |
|---|---|
00 00 10 11 | Mặc định của MSA — thứ đầu tiên nên thử |
00 00 00 00, FF FF FF FF | các giá trị mặc định thường gặp |
9B B0 3D FA | thấy trên một số module |
4F 43 50 00 | ASCII “OCP” |
Module QSFP-DD của một số nhà sản xuất xuất xưởng với các giá trị mặc định cố định riêng, và một vài module dựa trên vi xử lý dùng một mật khẩu thay đổi được — một cái bẫy cho bất kỳ ai cố dò toàn bộ.
Vì sao dò toàn bộ mật khẩu không phải là câu trả lời
Một mật khẩu cấp nhà sản xuất bảo vệ toàn bộ bản đồ bộ nhớ cần khoảng hơn 100 ngày để dò hết; ngay cả một mật khẩu ASCII cấp host cũng cần tới khoảng ba ngày. Con đường thực tế là một cơ sở dữ liệu các mã và mật khẩu đã biết được thu thập từ các module gốc — đây chính là nơi nằm giá trị thực sự của một công cụ mã hóa, chứ không phải ở phần cứng I²C (vốn rất đơn giản).
Những cạm bẫy của bộ lập trình tự chế
- Các bộ lập trình CH341A giá rẻ không tính checksum của SFP. Ghi một ảnh mà không có CC_BASE/CC_EXT hợp lệ sẽ tạo ra một module mà switch sẽ từ chối. Bạn cần một công cụ tự động tính lại checksum.
- Một số switch chỉ ghi được vào địa chỉ 0x50, nên không thể chạm tới mật khẩu ở 0x51 từ chính switch — cần một bo mạch lập trình đúng nghĩa.
- Chân bảo vệ ghi của EEPROM — một số nhà máy nối WP với Vcc, khiến module bị khóa ghi khi ở hiện trường.
Các trường hợp từ hiện trường
- Các module được mã hóa theo một nhà sản xuất sẽ không tự động đàm phán được trên switch của một nhà sản xuất khác; sau khi mã hóa lại theo đúng chuỗi nhà sản xuất của switch, chúng lên liên kết ngay lập tức.
- Một số nhà sản xuất quang học chủ ý xuất xưởng module chưa mã hóa, kỳ vọng người mua sẽ mã hóa chúng cho nền tảng đích.
- Module DWDM được điều chỉnh theo bước sóng qua cùng giao diện quản lý dùng để mã hóa.
Thực hiện trong CodingBox
- Đọc module; nó được tự động lưu vào code database và một bản sao lưu được tạo trước khi ghi.
- Đặt địa chỉ bảng, địa chỉ mật khẩu và giá trị mật khẩu trong Bộ nhớ được bảo vệ ghi và mật khẩu — các mật khẩu đã biết từ cơ sở dữ liệu được áp dụng tự động.
- Chỉnh sửa nhà sản xuất, mã sản phẩm và các trường nhận dạng khác trong EEPROM editor. CC_BASE và CC_EXT được tính lại giúp bạn.
- Ghi các trang đã chọn, rồi đọc lại để xác nhận. Kiểm tra module trên switch bằng các lệnh trong Xác minh thiết bị quang.
Chỉ mã hóa module cho khả năng tương thích mà bạn có quyền thực hiện, và tuân theo chính sách của tổ chức bạn cũng như của các nhà sản xuất.
Các quy tắc đằng sau một lần mã hóa lại sạch sẽ — định dạng trường, bit nào cần đặt và tổng nào cần sửa — nằm trong Trường thông tin nhà sản xuất, Mã tuân thủ và Checksum.
Nhà máy làm gì ở cùng bước đó, và những vùng nào chứa dữ liệu hiệu chuẩn mà một lần ghi bất cẩn có thể phá hỏng: Sản xuất và kiểm tra, Bộ điều khiển và firmware.
Byte nào giữ thông tin gì trước khi bạn chỉnh sửa: Bản đồ A0h của SFF-8472, Bản đồ trang trên của SFF-8636, Bản đồ các trang trên của CMIS, Bản đồ XFP.
Mã sản phẩm đích và cú pháp của chúng theo từng nhà sản xuất: Mã sản phẩm OEM; mỗi lớp nền tảng kiểm tra gì sau khi ghi: Cách mỗi NOS xác thực một module.