Một công thức cho Steganografy
A Recipe for Steganogravy
Dự án này giới thiệu một kỹ thuật steganography mới, sử dụng các mô hình ngôn ngữ thần kinh (neural linguistic models) để nhúng dữ liệu bí mật vào phần giới thiệu công thức nấu ăn nghe có vẻ bình thường. Bằng cách tận dụng LLMs và các câu lệnh (prompts) được thiết kế khéo léo, công cụ này mã hóa các thông điệp tùy ý thành văn xuôi công thức nấu ăn tự nhiên, khiến người đọc lầm tưởng nội dung đó chỉ để làm SEO. Các developer có thể ứng dụng ý tưởng này để khám phá các phương pháp exfiltration dữ liệu ngầm hoặc xây dựng các giải pháp ẩn thông tin tùy chỉnh, cho thấy tiềm năng của việc thao túng tinh vi và các tác động bảo mật của các mô hình NLP hiện đại.
Lời giải thích sau đây thật vô nghĩa, tôi chỉ nghĩ ý tưởng mã hóa dữ liệu trong các blog về công thức nấu ăn thật thú vị và ngớ ngẩn. Với các công cụ quét AI và các cơ quan chính phủ chuyển vùng trên Internet và theo dõi...
ghi chú của tác giả
Lời biện minh sau đây thật vô nghĩa, tôi chỉ nghĩ ý tưởng mã hóa dữ liệu trong các blog về công thức nấu ăn thật thú vị và ngớ ngẩn.Với công cụ dọn dẹp AI và các cơ quan chính phủ chuyển vùng trên Internet và thu thập từng byte cuối cùng (hy vọng kiếm được lợi nhuận khi bạn xuất bản nhầm thông tin hữu ích trực tuyến), việc chia sẻ dữ liệu sẽ trở nên khó khăn hơn nếu không trở thành tương lai trách nhiệm pháp lý.
Một bước sai lầm và bạn thấy mình vô tình góp phần tự động hóa công việc của chính mình, khiến danh tính của bạn bị đánh cắp hoặc xúc phạm loại người dường như luôn phàn nàn về việc người khác bị xúc phạm.
Điều gì sẽ xảy ra nếu chúng tôi có thể ẩn dữ liệu ở một nơi không ai nghĩ đến việc xem xét? Điều gì sẽ xảy ra nếu chúng ta có thể nhấn chìm những mẩu kiến thức thơm ngon của mình trong một thứ nước vô vị để không có giá trị dinh dưỡng, ngay cả những tác nhân AI hung hãn nhất cũng sẽ nhổ nó ra?
tbrockman/recipe-blog-encoding
là một ngôn ngữ được mã hóa theo cảm xúc (và ít nhất là đạo văn một phần1) Python CLI cho phép bạn mã hóa dữ liệu dưới dạng ngôn ngữ hoàn toàn tự nhiên2 bằng cách sử dụng ngôn ngữ thần kinh kỹ thuật giấu tin.
Với lời nhắc chung và mô hình, nó có thể ẩn bí mật của bạn ở nơi mà chúng ít được mong đợi nhất: giới thiệu blog công thức nấu ăn.
python main.py mã hóa \
--tin nhắn "https://www.nokings.org/" \ --stego-file stego_output.txt \
--model "models/Qwen3-32B-Q4_K_M.gguf" \
--nhắc nhở "<|im_start|>người dùng
Bạn là tác giả blog viết phần giới thiệu công thức theo khuôn mẫu của mình, nhằm mục đích tối đa hóa cơ hội công thức của bạn được nhìn thấy bằng cách chơi trò SEO bài viết của bạn mà không quá dài dòng. Chỉ xuất ra phần giới thiệu công thức nấu ăn và không có gì khác, sử dụng tối đa 12 đoạn văn. Chọn một công thức ngẫu nhiên.<|im_end|>
<|im_start|>trợ lý
<nghĩ>
</nghĩ>"
tạo ra thứ gì đó giống như sau đây:
Bạn đang tìm kiếm một cách nhanh chóng và ngon miệng để gây ấn tượng với gia đình và bạn bè của mình? **Gà bơ tỏi một chảo với khoai tây thảo mộc** này chính là câu trả lời. Với hương vị thơm ngon và dễ làm, món ăn này rất phù hợp cho bữa tối cuối tuần hoặc bữa tiệc cuối tuần. Điều gì làm cho nó nổi bật? Nó chỉ cần một chảo, giảm thiểu việc dọn dẹp và cho phép hương vị phong phú ngấm hoàn hảo trong khi nấu mọi thứ.
Thịt gà được ướp với tỏi, bột hành và một chút ớt bột, sau đó nướng vàng hoàn hảo. Nhưng điểm nổi bật thực sự ở đây chính là món khoai tây tẩm bơ, mềm và hơi giòn, thấm đẫm từng chút hương vị thơm ngon. Trộn nhanh với rau mùi tây tươi và lá oregano sẽ tạo thêm sự ấm áp khiến công thức này trở nên đặc biệt.
Công thức này được tối ưu hóa cho các công cụ tìm kiếm với các từ khóa như *công thức gà áp chảo dễ dàng*, *gà bơ tỏi* và *món ăn kèm khoai tây thảo mộc*. Cho dù bạn là một đầu bếp dày dạn kinh nghiệm hay người mới bắt đầu vào bếp, món ăn này rất dễ thực hiện và đảm bảo mang lại hương vị tuyệt vời.
[ ... ]
Mà bất kỳ người đọc nào biết lời nhắc ban đầu và mô hình được sử dụng đều có thể sử dụng để khôi phục thông điệp chính trị ẩn trong công thức gà bơ tỏi yêu thích của bạn:
python main.py giải mã --stego-file stego_output.txt --model "models/Qwen3-32B-Q4_K_M.gguf" --prompt "..."
# đang xử lý ... ⌛
====================================================================================
BÍ MẬT ĐƯỢC PHỤC HỒI TIN NHẮN:
====================================================================================
https://www.nokings.org/
====================================================================================
Bà sẽ làm được điều đó như thế nào.
cách hoạt động
ghi chú của tác giả
Để bớt dài dòng hơn một chút, chúng tôi bỏ qua một số các chi tiết như 1) cách chúng tôi nhúng độ dài tải trọng vào đầu ra để bộ giải mã biết cần giải mã bao nhiêu bit sau này, 2) cách chúng tôi sử dụng lượng tử hóa để không hoạt động trên số float và 3) cách chúng tôi xử lý vấn đề mã hóa lại không rõ ràng khi giải mã, v.v.Việc triển khai chủ yếu tuân theo ẩn mã mã hóa số học. Ở cấp độ cao, bạn có thể hình dung như sau:
- Chúng tôi chuyển đổi bí mật của mình thành phân số nhị phân biểu thị một điểm ở đâu đó trên trục số nằm giữa [0, 1).
- Chúng tôi sử dụng phân bổ xác suất mã thông báo tiếp theo của mô hình để tạo ra các khoảng liền kề trên đường, trong đó độ rộng của mỗi khoảng tỷ lệ thuận với xác suất của mã thông báo.
- Chúng tôi liên tục chọn mã thông báo khoảng của nó chứa điểm của chúng tôi, thu hẹp khoảng ngày càng xa hơn, cho đến khi có đủ số bit đầu của điểm bắt đầu và điểm kết thúc của khoảng phù hợp với nhau, sao cho chúng tôi đã mã hóa thông báo của mình.
Dưới đây là ví dụ đơn giản với bí mật 3 bit:
bí mật: 1 0 1
→ phân số nhị phân: 0,101
→ điểm trên [0, 1): 0,625
bước 1: khoảng [0, 1)
"Cái" [0, 0,4) "Đang nhìn" [0,4, 0,55)
"Cái này" [0,55, 0,8) ← 0,625
"A" [0,8, 1)
→ chọn "Cái này", thu hẹp về [0,55, 0,8)
bước 2: khoảng [0,55, 0,8)
" công thức" [0.55, 0.7) ← 0.625
" là" [0,7, 0,76)
"Một" [0,76, 0,8)
→ chọn "công thức", thu hẹp đến [0,55, 0,7)
bước 3: khoảng [0,55, 0,7)
" là" [0,55, 0,625)
" công dụng" [0.625, 0.67) ← 0.625
" cho" [0,67, 0,7)
→ chọn "sử dụng", thu hẹp đến [0,625, 0,67)
[0,625, 0,67) ở dạng nhị phân:
[0,101..., 0,101...]
^^^ ^^^
các bit đầu đồng ý: 1 0 1 → bí mật được khôi phục ✓
Văn bản được tạo khi đó sẽ có nội dung: “Công thức này sử dụng”
Việc giải mã hoàn toàn ngược lại: chạy cùng một mô hình với cùng một dấu nhắc, xây dựng lại phân bố xác suất ở mỗi bước và đọc lại các bit bí mật bằng cách kiểm tra xem mã thông báo nào đã được sử dụng. Điều quan trọng cần lưu ý là cả hai bên đều cần mô hình, lượng tử hóa, top-k và dấu nhắc giống hệt nhau – bất kỳ sự không khớp nào và các phân phối sẽ phân kỳ, tạo ra rác.
giới hạn
khá là lãng phí
Bạn đang tải các mô hình lớn để mã hóa và giải mã một lượng nhỏ thông tin, một cách chậm rãi, ở < 2-3 bit/mã thông báo. Đây không phải là cách sử dụng điện toán hiệu quả.
mã thông báo bpe
Hóa ra là nếu bạn chọn một mã thông báo trong khi mã hóa, giải mã nó thành văn bản rồi mã hóa lại văn bản đó thì không phải lúc nào bạn cũng nhận được cùng một mã thông báo. Ví dụ: nếu văn bản cho đến nay được mã hóa thành [..., "hel"] và mô hình chọn "lo" làm mã thông báo tiếp theo thì văn bản kết hợp "hello" có thể được mã hóa lại dưới dạng một đơn lẻ "xin chào" thay vì "hel" + "lo". Sau đó, khi giải mã, bộ giải mã sẽ thấy một mã thông báo hoàn toàn khác ở vị trí đó và mọi thứ sau đó sẽ phân kỳ.
bản sửa lỗi của claude: Thêm một bộ lọc mà ở mỗi bước sẽ kiểm tra xem mã thông báo ứng cử viên có tồn tại trong suốt hành trình khứ hồi thông qua giải mã và mã thông báo hay không. Các mã thông báo sẽ không bị loại khỏi CDF trước khi bất kỳ phép tính khoảng nào xảy ra. Bạn mất một số khả năng mã hóa nhưng bạn có thể chắc chắn rằng nếu tin nhắn của bạn có thể được mã hóa thì nó cũng có thể được giải mã.
có thể đạt tới phần cuối của mô hình trước khi bí mật được mã hóa hoàn toàn
câu hỏi: Chúng tôi phải làm gì nếu lời nhắc chúng tôi đã chọn không cung cấp đường dẫn để tạo đủ mã thông báo nhằm mã hóa bí mật của chúng tôi, hội tụ ở cuối chuỗi trước khi cung cấp cho chúng tôi đủ bit?
câu trả lời: 🤷 hãy chọn lời nhắc tốt hơn và thử lại.
bảo mật
Lời nhắc hoạt động như một khóa chung nhưng lại bị rò rỉ. Văn bản được tạo được điều chỉnh thống kê theo dấu nhắc, trong đó dấu nhắc được hiển thị một phần bởi đầu ra của chính nó (thường không được coi là thuộc tính lý tưởng cho các phương pháp mã hóa).
mô hình đe dọa: chuyển một ghi chú cho bạn bè của bạn về cô gái mà bạn thích trong lớp, thông qua một người trung gian không đáng tin cậy
chỉ LLM cục bộ
Không phải vậy đâu không thể sử dụng bất kỳ API từ xa nào (điều này sẽ miễn là chúng cung cấp đủ tính xác định và nhật ký), tất cả những gì cục bộ đã được triển khai.
dùng thử
Có trên Google Collab hoặc từ nguồn:
git bản sao https://github.com/tbrockman/recipe-blog-encoding/
cd recipe-blog-encoding
trăn3 -m venv env
nguồn env/bin/kích hoạt
pip install -r require.txt
python main.py --help
chúc bạn nấu ăn vui vẻ ✌️
-
Cuộc điều tra tiếp theo cho thấy rằng
artkpv/arithmetic-coding-steganography/có thể là nơi Claude tìm thấy nguồn cảm hứng để triển khai ↩ -
Như được xác định theo lời nhắc và mô hình được chia sẻ ↩
Tác giả: tbrockman