Steganography online: giấu chữ vào ảnh PNG và đọc lại ngay trên trình duyệt
Steganography là kỹ thuật giấu thông tin bên trong một tệp trông hoàn toàn bình thường. Công cụ steganography online này ghi đoạn văn bản của bạn vào bit thấp nhất của các kênh màu đỏ, xanh lá, xanh dương trong ảnh, mỗi kênh chỉ lệch tối đa 1 trên 255 nên mắt thường không nhận ra. Bạn có thể khóa nội dung bằng mật khẩu (AES-GCM 256 bit), xem trước sức chứa của ảnh, tải ảnh PNG kết quả và dùng chế độ đọc để lấy lại nội dung. Ảnh không rời khỏi máy của bạn.
Tính năng nổi bật
- Giấu văn bản UTF-8 đầy đủ tiếng Việt có dấu và emoji, tự chuẩn hóa về dạng NFC trước khi ghi
- Kỹ thuật LSB trên ba kênh R, G, B, chọn 1 bit mỗi kênh (khó thấy nhất) hoặc 2 bit mỗi kênh (chứa gấp đôi)
- Tùy chọn mật khẩu: mã hóa AES-GCM 256 bit, khóa sinh bằng PBKDF2-SHA-256 600.000 vòng, salt và IV ngẫu nhiên lưu cùng dữ liệu
- Hiển thị sức chứa theo byte của từng ảnh trước khi giấu, cảnh báo ngay khi nội dung vượt sức chứa
- Phần đầu dữ liệu có mã nhận dạng, độ dài và CRC-32 để phân biệt rõ ba trường hợp: ảnh không có dữ liệu, ảnh bị hỏng và sai mật khẩu
- Xử lý đúng ảnh có vùng trong suốt: bỏ qua điểm ảnh bán trong suốt hoặc cho phép làm đặc toàn bộ ảnh
- Tự đọc thử lại tệp PNG vừa xuất để xác nhận nội dung khôi phục được trước khi bạn tải về
- Cảnh báo khi trình duyệt đang chèn nhiễu vào canvas do chế độ chống fingerprinting
Khi nào cần giấu chữ trong ảnh
Giấu chữ trong ảnh hữu ích khi bạn muốn gắn một thông tin đi kèm tấm ảnh mà không làm thay đổi vẻ ngoài của nó: ghi chú bản quyền và mã hợp đồng vào ảnh sản phẩm giao cho khách, đánh dấu phiên bản ảnh gửi cho từng đối tác để biết bản nào bị phát tán, hay chuẩn bị đề bài cho các cuộc thi an toàn thông tin kiểu CTF. Đây cũng là cách trực quan để học về cấu trúc điểm ảnh, bit và mã hóa. Công cụ chạy hoàn toàn trong trình duyệt nên ảnh nội bộ không bị tải lên máy chủ nào. Hãy dùng công cụ cho mục đích hợp pháp: giấu thông tin không giúp bạn né tránh pháp luật, và nội dung không có mật khẩu có thể bị bất kỳ ai nghi ngờ đọc ra.
Lợi ích khi sử dụng
- Gắn thông tin bản quyền hoặc mã theo dõi vào ảnh mà không làm xấu ảnh như watermark chữ in đè
- Ảnh và nội dung không rời khỏi máy tính, phù hợp tài liệu nội bộ
- Có mật khẩu mã hóa chuẩn thay vì chỉ giấu, người không có mật khẩu đọc ra cũng chỉ thấy dữ liệu vô nghĩa
- Biết chính xác lý do khi không đọc được: không có dữ liệu, ảnh đã bị nén lại hay sai mật khẩu
- Công cụ học tập trực quan về bit, điểm ảnh và mã hóa cho sinh viên, người mới học an toàn thông tin
Cách giấu và đọc chữ trong ảnh
- 1Ở chế độ Giấu chữ vào ảnh, chọn một ảnh gốc. Ảnh càng lớn và càng nhiều chi tiết thì càng chứa được nhiều chữ và càng khó phát hiện.
- 2Nhập nội dung cần giấu và xem dòng sức chứa bên dưới. Nếu vượt, hãy rút gọn nội dung, chọn 2 bit mỗi kênh hoặc dùng ảnh lớn hơn.
- 3Nếu muốn chỉ người có mật khẩu mới đọc được, nhập mật khẩu hai lần. Nếu ảnh có vùng trong suốt, quyết định có làm đặc toàn bộ ảnh hay không.
- 4Bấm Giấu chữ và tạo ảnh PNG, chờ công cụ tự đọc thử lại, sau đó tải ảnh PNG về.
- 5Gửi ảnh cho người nhận dưới dạng tệp đính kèm hoặc qua dịch vụ lưu trữ, không đăng lên mạng xã hội.
- 6Người nhận mở chế độ Đọc chữ từ ảnh, chọn tệp PNG, nhập mật khẩu nếu có và bấm đọc.
Kỹ thuật LSB hoạt động như thế nào
Mỗi điểm ảnh trong ảnh màu thường có ba kênh đỏ, xanh lá, xanh dương, mỗi kênh là một số từ 0 đến 255, tức 8 bit. Bit cuối cùng, gọi là bit ít quan trọng nhất (least significant bit, LSB), chỉ làm màu thay đổi 1 đơn vị trên 255, mắt người không phân biệt được. Công cụ tách nội dung của bạn thành từng bit rồi lần lượt thay bit cuối của các kênh màu, đi từ điểm ảnh trên cùng bên trái sang phải và xuống dưới. Với tùy chọn 2 bit mỗi kênh, hai bit cuối được thay nên mỗi kênh lệch tối đa 3 đơn vị, sức chứa gấp đôi nhưng dễ bị công cụ phân tích thống kê phát hiện hơn. Kênh alpha (độ trong suốt) không bao giờ được dùng để chứa dữ liệu.
Sức chứa của một tấm ảnh
Mỗi điểm ảnh đặc cho 3 bit ở chế độ 1 bit mỗi kênh. Công cụ dành 112 kênh đầu tiên cho phần đầu dữ liệu 14 byte gồm mã nhận dạng TPSG, phiên bản, cờ, độ dài và mã CRC-32, phần còn lại chứa nội dung. Theo đúng công thức của công cụ, ảnh 1920 × 1080 đặc hoàn toàn chứa được 777.586 byte văn bản ở chế độ 1 bit và 1.555.172 byte ở chế độ 2 bit. Khi bật mật khẩu, mỗi lần giấu tốn thêm 44 byte cho salt, IV và thẻ xác thực. Lưu ý đơn vị là byte UTF-8: chữ không dấu tốn 1 byte, đa số chữ tiếng Việt có dấu tốn 2 đến 3 byte, emoji tốn 4 byte, nên dòng sức chứa trên công cụ luôn so bằng byte chứ không bằng số ký tự.
Vì sao chỉ xuất PNG và không được gửi qua mạng xã hội
PNG là định dạng nén không mất dữ liệu: giá trị từng kênh màu được giữ nguyên tuyệt đối, nên các bit đã giấu còn nguyên. JPEG và WebP dạng lossy thì ngược lại, chúng chia ảnh thành khối và bỏ bớt chi tiết mà mắt khó thấy, đúng vào những bit thấp đang chứa dữ liệu, nên chỉ cần lưu lại một lần dưới dạng JPEG là nội dung giấu bị xóa. Facebook, Instagram, Zalo, Messenger và hầu hết mạng xã hội đều nén lại, đổi kích thước hoặc chuyển ảnh bạn tải lên sang JPEG. Các thao tác cắt ảnh, xoay, chỉnh sáng, thêm bộ lọc hay chụp màn hình cũng phá hỏng dữ liệu. Muốn người nhận đọc được, hãy gửi tệp gốc qua email đính kèm, Google Drive, gửi dạng tệp tin trong ứng dụng nhắn tin, hoặc nén vào tệp ZIP. Ảnh gốc là JPEG vẫn dùng làm nền được, vì kết quả luôn xuất ra PNG.
Ảnh có vùng trong suốt và vấn đề premultiplied alpha
Canvas của trình duyệt thường lưu màu ở dạng đã nhân sẵn với độ trong suốt (premultiplied alpha). Với điểm ảnh bán trong suốt, ví dụ alpha 128, giá trị đỏ 201 có thể bị làm tròn thành 200 hoặc 202 sau khi ghi vào rồi đọc ra, và điểm ảnh trong suốt hoàn toàn thường bị đưa màu về 0. Nếu ghi dữ liệu vào những điểm ảnh này, bit giấu sẽ sai. Vì vậy công cụ mặc định chỉ dùng điểm ảnh có alpha bằng 255 và bỏ qua các điểm còn lại, cả khi giấu lẫn khi đọc. Với logo hay ảnh cắt nền có nhiều vùng trong suốt, sức chứa sẽ giảm tương ứng; bạn có thể chọn làm đặc toàn bộ ảnh để dùng hết điểm ảnh, đổi lại vùng trong suốt sẽ hiện ra màu nền ẩn bên dưới, thường là đen.
Mật khẩu bảo vệ nội dung ra sao
Không có mật khẩu, việc giấu chữ chỉ là che mắt: ai biết định dạng này, kể cả dùng chính công cụ này, đều đọc được. Khi đặt mật khẩu, nội dung được mã hóa trước khi giấu. Công cụ sinh ngẫu nhiên 16 byte salt và 12 byte IV cho mỗi lần giấu, dùng PBKDF2 với SHA-256 lặp 600.000 vòng để biến mật khẩu thành khóa 256 bit, rồi mã hóa bằng AES-GCM. AES-GCM có thẻ xác thực nên nếu mật khẩu sai hay dữ liệu bị sửa, việc giải mã thất bại thay vì ra chữ rác. Mã CRC-32 ở phần đầu cho phép công cụ nói rõ dữ liệu vẫn nguyên vẹn và lỗi là do sai mật khẩu. Độ an toàn phụ thuộc vào mật khẩu: mật khẩu ngắn, dễ đoán vẫn có thể bị dò. Quên mật khẩu thì không có cách nào lấy lại nội dung.
Giới hạn và những điều công cụ không làm được
Steganography LSB không chống được phân tích chuyên sâu: các phương pháp thống kê như phép thử khi bình phương hay RS analysis có thể nhận ra ảnh đã bị giấu dữ liệu, đặc biệt với chế độ 2 bit hoặc khi nội dung chiếm gần hết sức chứa. Phần đầu dữ liệu có mã nhận dạng cố định, nên ai có công cụ này đều biết ảnh có chứa dữ liệu, dù không đọc được nếu có mật khẩu. Công cụ chỉ đọc được dữ liệu giấu theo định dạng của chính nó, không đọc được ảnh tạo bằng phần mềm steganography khác. Ảnh lớn hơn khoảng 16,7 triệu điểm ảnh bị từ chối để tránh trình duyệt, nhất là trên điện thoại, hết bộ nhớ. Nếu trình duyệt bật chế độ chống fingerprinting và chèn nhiễu vào canvas, công cụ sẽ cảnh báo và bước đọc thử sau khi giấu sẽ báo lỗi.
Sử dụng có trách nhiệm
Những ứng dụng chính đáng của steganography gồm đánh dấu bản quyền ẩn, theo dõi nguồn phát tán ảnh nội bộ, làm bài tập và đề thi CTF, minh họa trong giảng dạy về an toàn thông tin. Công cụ không được thiết kế để qua mặt cơ quan chức năng hay hệ thống kiểm soát dữ liệu của tổ chức bạn đang làm việc; việc dùng ảnh để chuyển thông tin trái quy định vẫn là vi phạm, và như đã nói ở trên, kỹ thuật này có thể bị phát hiện. Khi giấu thông tin cá nhân của người khác, hãy tuân thủ quy định bảo vệ dữ liệu cá nhân như với bất kỳ hình thức lưu trữ nào.
Câu hỏi thường gặp (FAQ)
Ảnh sau khi giấu chữ có nhìn khác ảnh gốc không?
Ở chế độ 1 bit mỗi kênh, mỗi kênh màu lệch tối đa 1 trên 255 đơn vị, mắt thường không thấy khác biệt. Ở chế độ 2 bit, lệch tối đa 3 đơn vị, vẫn khó thấy trên ảnh chụp nhưng có thể lộ trên vùng màu phẳng khi phóng to rất lớn.
Vì sao ảnh kết quả nặng hơn ảnh gốc?
Nếu ảnh gốc là JPEG, bản PNG không mất dữ liệu thường nặng hơn nhiều lần. Ngay cả khi gốc là PNG, các bit thấp bị thay khiến dữ liệu khó nén hơn một chút. Đây là cái giá bắt buộc để giữ nguyên các bit đã giấu.
Gửi ảnh qua Zalo hoặc Messenger thì người nhận có đọc được không?
Gửi dạng ảnh thì không, vì ứng dụng nén lại ảnh. Hãy gửi dưới dạng tệp tin (tính năng gửi file), qua email đính kèm hoặc chia sẻ link Google Drive để tệp PNG được giữ nguyên từng byte.
Tôi có thể dùng ảnh JPEG làm ảnh gốc không?
Có. Công cụ đọc điểm ảnh của JPEG, giấu dữ liệu rồi xuất ra PNG. Điều không làm được là lưu kết quả lại dưới dạng JPEG, vì nén JPEG xóa các bit đã giấu.
Không nhập mật khẩu thì nội dung có an toàn không?
Không. Không có mật khẩu, nội dung chỉ bị giấu chứ không bị mã hóa, bất kỳ ai dùng công cụ này hoặc tự viết đoạn mã đọc bit thấp đều đọc được. Chỉ bỏ trống mật khẩu khi nội dung không nhạy cảm, ví dụ ghi chú bản quyền.
Quên mật khẩu thì có lấy lại nội dung được không?
Không. Mật khẩu không được lưu ở đâu, khóa giải mã chỉ sinh ra được từ đúng mật khẩu đó. Nên lưu mật khẩu vào trình quản lý mật khẩu trước khi gửi ảnh.
Công cụ báo ảnh bị hỏng, sai CRC nghĩa là gì?
Nghĩa là công cụ tìm thấy phần đầu dữ liệu nhưng nội dung phía sau không khớp mã kiểm tra, thường do ảnh đã bị nén lại, đổi kích thước, cắt hoặc chỉnh màu sau khi giấu. Khi đó dữ liệu không thể khôi phục, hãy xin lại tệp PNG gốc.
Một ảnh chứa được bao nhiêu chữ?
Khoảng 3 bit cho mỗi điểm ảnh đặc ở chế độ 1 bit, trừ 14 byte phần đầu. Ảnh 1920 × 1080 chứa được 777.586 byte, tức vài trăm nghìn chữ tiếng Việt. Công cụ hiển thị sức chứa chính xác ngay khi bạn chọn ảnh.
Ảnh PNG có nền trong suốt có dùng được không?
Dùng được. Mặc định công cụ chỉ ghi vào điểm ảnh đặc hoàn toàn và bỏ qua vùng trong suốt để tránh lỗi làm tròn màu của trình duyệt. Nếu vùng đặc quá ít, bạn có thể chọn làm đặc toàn bộ ảnh, đổi lại nền trong suốt sẽ mất.
Ảnh của tôi có bị tải lên máy chủ không?
Không. Ảnh được đọc bằng canvas và xử lý bằng JavaScript ngay trong trình duyệt, mã hóa dùng Web Crypto có sẵn trong trình duyệt. Không có yêu cầu mạng nào gửi ảnh hay nội dung đi.
Công cụ có đọc được ảnh giấu bằng phần mềm khác không?
Không. Mỗi phần mềm steganography có cách sắp xếp bit và phần đầu dữ liệu riêng. Công cụ này chỉ nhận dữ liệu có mã nhận dạng TPSG do chính nó tạo ra.
Vì sao công cụ cảnh báo trình duyệt đang thay đổi điểm ảnh?
Một số trình duyệt như Firefox với chế độ chống fingerprinting, Brave hoặc tiện ích bảo mật cố ý chèn nhiễu nhỏ vào dữ liệu đọc từ canvas để chống theo dõi. Nhiễu này làm sai các bit thấp, nên giấu và đọc dữ liệu sẽ không chính xác. Hãy tạm tắt chế độ đó cho trang hoặc dùng trình duyệt khác.
Steganography có phải là mã hóa không?
Không. Steganography che giấu sự tồn tại của thông tin, còn mã hóa làm thông tin không đọc được nếu không có khóa. Công cụ kết hợp cả hai khi bạn đặt mật khẩu: nội dung được mã hóa AES-GCM rồi mới giấu vào ảnh.
Từ khóa liên quan
- steganography online
- giấu chữ trong ảnh
- giấu tin trong ảnh
- steganography là gì
- giấu thông tin trong ảnh png
- lsb steganography
- đọc chữ ẩn trong ảnh
- image steganography decoder
- steganography tool
- giấu tin nhắn bí mật trong hình
- watermark ẩn trong ảnh
- steganography ctf
- mã hóa tin nhắn trong ảnh
- hide text in image
- decode hidden message in image
- kỹ thuật giấu tin
- steganography aes
- giấu dữ liệu trong ảnh không bị phát hiện