Bảo mật
Bảo mật mang cảm giác hiếu khách.
Một nhà cung cấp danh tính chỉ tốt bằng những bức tường ngăn giữa các tenant và sự cẩn trọng với thông tin bí mật. Đây là cách Usher Identity được xây dựng. Chúng tôi mô tả những gì phần mềm làm; chúng tôi không tuyên bố có chứng nhận nào.
Kiến trúc
Tên miền riêng, mạng riêng.
Các trang của chính Usher Identity và bên phát hành của mỗi khách hàng nằm trên những tên miền có thể đăng ký khác nhau. Cơ sở dữ liệu nằm trên một mạng không thể ra internet, và lối ra duy nhất là một proxy kiểm tra nơi kết nối sẽ đến.
- Caddy xử lý TLS cho mọi host và loại bỏ những header mà chỉ các dịch vụ của chính Usher Identity mới được đặt.
- Tầng xác thực phục vụ mọi môi trường, phân biệt theo host; không có gì được lưu bộ nhớ đệm cho host này rồi phục vụ cho host khác.
- Mỗi dịch vụ giao tiếp với Valkey bằng người dùng riêng, chỉ được dùng khóa của chính mình. Không có người dùng mặc định.
- Các câu lệnh chứa token và mã không bao giờ được ghi vào nhật ký cơ sở dữ liệu kèm giá trị của chúng.
Internet
Người dùng, ứng dụng của bạn, máy chủ của bạn
Lớp biên
Caddy: TLS, HSTS, loại bỏ header nội bộ
usheridentity.com
Trang web và Console
usheridentity.com, console.usheridentity.com
API
api.usheridentity.com
*.usherid.com
Tầng xác thực
Bên phát hành và Lobby của mọi môi trường
Mạng dữ liệu · không có đường ra
Postgres
Mỗi môi trường một schema
Valkey
Mỗi dịch vụ chỉ dùng khóa của chính mình
Lối ra duy nhất
Proxy đi ra
Cho mọi URL do khách hàng cung cấp
Khám phá, JWKS, đăng xuất
Chỉ địa chỉ công khai
Cách ly
Không dùng chung bất cứ thứ gì quan trọng.
Mỗi môi trường của dự án có schema Postgres riêng, khóa ký riêng và thông tin bí mật riêng được niêm phong bằng khóa dữ liệu riêng. Bên phát hành của môi trường là một host trên tên miền tenant, và cookie của nó chỉ dành cho host đó, nên trình duyệt không bao giờ gửi cookie của môi trường này sang môi trường khác.
usheridentity.com
Trang web, Usher Identity Console, tài khoản Usher Identity
*.usherid.com
Mỗi môi trường một bên phát hành, trên một tên miền tách biệt
Người dùng, phiên và token nằm trong một schema được tạo cho môi trường này. Các truy vấn chạy trên schema đó, không bao giờ trên một bảng dùng chung có cột tenant.
Sao chép client secret Google đã niêm phong từ môi trường chính thức của Acme sang môi trường chính thức của Northwind.
Mã hóa dữ liệu lưu trữ
Mã hóa phong bì, gắn chặt với vị trí của nó.
Thông tin bí mật bạn giao cho Usher Identity được niêm phong bằng AES-256-GCM dưới một khóa dữ liệu thuộc về một môi trường. Bản thân các khóa dữ liệu được bọc bằng một khóa chính có phiên bản, lưu ngoài cơ sở dữ liệu.
- Khóa dữ liệu riêng cho từng môi trường
- Lộ khóa dữ liệu của một môi trường không tiết lộ gì về khóa của môi trường khác.
- Ràng buộc AAD
- Môi trường và mục đích được gắn vào mọi bản mã, nên không thể chuyển một giá trị giữa các hàng hay các tenant.
- Khóa có phiên bản
- Mỗi giá trị được niêm phong ghi lại phiên bản khóa đã dùng để tạo ra nó, nên có thể xoay vòng khóa và bọc lại các giá trị cũ.
- Có xác thực
- Thẻ xác thực của GCM có nghĩa là một giá trị bị can thiệp sẽ không mở được, thay vì giải mã ra một thứ khác.
Khóa chính
Lưu ngoài cơ sở dữ liệu, có phiên bản
Khóa dữ liệu, mỗi môi trường một khóa
Được bọc bằng khóa chính
Thông tin bí mật
Được niêm phong bằng AES-256-GCM dưới khóa dữ liệu
u1.<key version>.<iv>.<ciphertext + tag>
aad = u1 | version | environment | purpose
Thực hành
Từng chi tiết, làm cẩn thận.
Mật khẩu, nếu bạn dùng
Được băm bằng Argon2id ở mức chi phí OWASP khuyến nghị (19 MiB, hai lượt), với giới hạn số lượt chạy cùng lúc để một đợt đăng nhập dồn dập không thể làm sập dịch vụ. Mật khẩu mới được đối chiếu với các vụ rò rỉ đã biết qua API phạm vi của Have I Been Pwned, vốn chỉ thấy một tiền tố ngắn của giá trị băm mật khẩu. Độ dài tối thiểu mặc định là 12.
Không lưu gì có thể bị dùng lại
Client secret, token, token của liên kết đăng nhập và mã gửi qua email đều được lưu ở dạng băm. Mã dự phòng được mã hóa. Một mã ủy quyền có hiệu lực năm phút; một mã gửi qua email cho phép thử ba lần.
Giới hạn tần suất ở mọi cánh cửa
Đăng nhập, đăng ký, mã qua email, liên kết đăng nhập, đặt lại mật khẩu và kiểm tra yếu tố thứ hai đều có giới hạn riêng: ví dụ, mười lần đăng nhập bằng mật khẩu mỗi phút, và năm mã qua email mỗi mười phút.
Content-Security-Policy nghiêm ngặt
Mỗi trang Lobby có một nonce mới và một chính sách xây dựng quanh nonce đó: chỉ các script của origin này mang nonce mới được chạy, biểu mẫu chỉ gửi đến cùng origin, và các trang khác không thể nhúng trang vào khung.
Nhật ký kiểm toán đáng tin cậy
Các thay đổi đối với không gian làm việc, dự án và môi trường được ghi vào một nhật ký chỉ cho phép ghi thêm, mỗi mục được nối chuỗi băm với mục trước, nên một mục bị sửa hoặc bị mất sẽ lộ ra.
Proxy đi ra cho URL của khách hàng
Mọi yêu cầu Usher Identity gửi đến một địa chỉ do khách hàng cung cấp (khám phá OIDC, JWKS, đăng xuất qua kênh sau) đều đi qua một proxy duy nhất. Proxy phân giải tên một lần, từ chối các địa chỉ riêng tư, loopback, link-local và metadata đám mây, rồi kết nối đến đúng địa chỉ đã kiểm tra, nên DNS rebinding không thể biến URL của khách hàng thành một URL nội bộ.
Tên định danh không bao giờ được cấp hai lần
Tên định danh của một môi trường chính thức là nhãn đầu tiên trong bên phát hành của nó. Console chỉ mở cho người được mời, Lobby bị báo cáo lừa đảo sẽ bị tạm ngưng, và một tên định danh đã dùng sẽ không bao giờ được cấp lại, vì các ứng dụng cũ có thể vẫn tin tưởng token của nó.
Phiên kết thúc khi bạn muốn
Usher Identity kiểm tra phiên của chính mình ở mỗi yêu cầu thay vì tin vào một bản sao trong bộ nhớ đệm, nên một phiên bạn kết thúc sẽ chấm dứt ngay lập tức. Token truy cập có hiệu lực ngắn (mặc định mười phút), và API của bạn có thể kiểm tra chúng.
Công bố có trách nhiệm
Phát hiện điều gì? Hãy báo cho chúng tôi trước.
Nếu bạn nghĩ mình đã tìm thấy một lỗi bảo mật trong Usher Identity, chúng tôi rất muốn được nghe, và sẽ cùng bạn khắc phục.
- Bạn đã tìm thấy gì, ở đâu, và cách tái hiện.
- Theo bạn hiểu, ai đó có thể làm gì với lỗi này.
- Cách chúng tôi có thể liên hệ với bạn, và bạn có muốn được ghi công hay không.
Vui lòng chỉ thử nghiệm trên các môi trường bạn sở hữu, không truy cập dữ liệu của người khác, và cho chúng tôi một khoảng thời gian hợp lý để khắc phục trước khi bạn chia sẻ. Để báo cáo một trang giả mạo trang đăng nhập Usher Identity, hãy xem Báo cáo lạm dụng.