Mặc dù bạn có thể tạo hàm băm, mật mã đối xứng, lược đồ mã hóa khóa công khai, v.v. của riêng mình để không ai biết thiết kế của nó, nhưng có lẽ là một ý tưởng tồi khi dựa vào sự tối nghĩa (như @kelalaka đã nhận xét) để có được bảo mật.
Vào thế kỷ 19, Auguste Kerckhoffs đã phát biểu một nguyên tắc mà chúng ta gọi là "Nguyên lý Kerckhoffs":
một hệ thống mật mã phải được bảo mật ngay cả khi mọi thứ về hệ thống, ngoại trừ khóa, là kiến thức công khai.
Ngoài ra, Châm ngôn của Shannon cũng được xây dựng trong thế kỷ 20 và nó nói rằng:
người ta phải thiết kế các hệ thống theo giả định rằng kẻ thù sẽ ngay lập tức hoàn toàn quen thuộc với chúng
Hay nói cách khác - khi bạn thiết kế một hệ thống để bảo mật, bạn phải cho rằng kẻ tấn công biết hệ thống hoạt động như thế nào.
Trong ví dụ của bạn về hàm băm độc quyền, kẻ tấn công bằng cách nào đó có thể truy cập vào phần mềm hoặc phần cứng tính toán hàm băm đó và sử dụng phân tích mật mã hoặc kỹ thuật ngược, kẻ tấn công sẽ quản lý để tìm ra các lỗ hổng như tấn công va chạm hoặc khôi phục trước hình ảnh kỹ xảo.
Một lý do khác để không dựa vào các kỹ thuật độc quyền hoặc bí mật là niềm tin của người tiêu dùng: Tại sao người tiêu dùng tin tưởng rằng bạn giữ an toàn cho mật khẩu (đã băm) của họ nếu bạn thừa nhận rằng bảo mật đến từ việc không biết cách triển khai?
Đây là lý do tại sao trong ngành công nghiệp, các nguyên hàm mật mã (hàm băm, mật mã, sơ đồ chữ ký, v.v.) thường chỉ được chấp nhận sau khi đã được cộng đồng khoa học xem xét kỹ lưỡng. Sau đó, các tiêu chuẩn và RFC đang được soạn thảo để các đại lý và nhà cung cấp dịch vụ có thể định lượng mức độ bảo mật của họ bằng cách cho biết họ tuân thủ tiêu chuẩn nào.