Stenography là gì
Gần đây tôi có tham gia giải một số bài CTF về Steganography khá thú vị, vừa rồi lại có dịp được làm một đề tài nhỏ cho môn học An Toàn Mạng về mảng này. Hôm nay xin chia sẻ ở đây cho ai đó quan tâm, nội dung sẽ khá dài vì tôi muốn trình bày chi tiết cho bạn nào muốn tìm hiểu sâu về nó hơn là chơi một bài CTF để lấy điểm (như tôi
chẳng hạn :D), tôi sẽ chia làm 2 phần, bài bạn đang đọc là phần giới thiệu về Steganography. A muốn gửi cho B thông điệp “MY SECRET” mà không muốn người khác biết đến sự tồn tại của nó, A sẽ tìm cách truyền tải thông điệp này vào một tập tin hình ảnh, âm thanh hoặc video sau đó gửi tập tin này cho B, người khác chỉ thấy và xem được nội dung tập tin mà không biết là có thông điệp ẩn dấu bên trong nó. Các phương pháp ẩn dấu dữ liệu theo phương pháp này được gọi là Steganography. (Nguồn: internet) Lưu ý Steganography khác Cryptography (Mật mã học) ở chỗ người gửi không muốn cho người khác biết là có thông điệp bí mật đang được gửi. Trong Cryptography sẽ xảy ra hai quá trình ngược chiều nhau là mã hóa (Encrypt) và giải mã (Decrypt) dựa vào một chìa khóa bí mật (key). Trong Steganography cũng sẽ xảy ra hai quá trình ngược nhau là mã hóa (Encode) và giải mã (Decode) nhưng không cần thông qua chìa khóa nào cả. Mặc dù vậy cũng có thể kết hợp cả Steganography và Cryptography để bảo mật thông tin nếu bạn thích.
Bài kế tiếp tôi sẽ trình bày chi tiết thuật toán để Encode một thông điệp vào một bức ảnh và hiện thực nó bằng Java, thuật toán sử dụng ở đây là LSB steganography, đây là một thuật toán rất đơn giản và phổ biến. Bài đăng phổ biến từ blog này Bài viết
này tôi chia sẻ về cách cài đặt thuật toán LSB Steganography mà tôi đã trình bày tại Phần 1 Một số lý thuyết cần chú ý trước khi chúng ta bắt đầu: Một bức ảnh sẽ có chiều rộng là W, chiều cao là H nên số điểm ảnh (pixel) là W x H, chúng ta sẽ có một ma trận các pixel có H dòng và W cột (W x H) Mỗi pixel có một giá trị màu RGB (Red – Green – Blue), mỗi giá trị R – G – B có giá trị từ 0 -> 255 tương ứng với một Byte trong lưu trữ, suy ra có tất cả 256 3 tổ hợp màu khác nhau có thể được tạo
ra. Ví dụ: Màu đỏ R có giá trị RGB là (255, 0, 0); Xanh lá cây G (0,255,0); màu vàng Yello (255,255,0);…. Mỗi Byte gồm 8 Bit, Bit có chỉ số nhỏ nhất gọi là LSB (Least Significant Bit). Ví dụ: Giá trị 147 chuyển sang nhị phân là 10010011 sẽc có LSB là 1. Giá trị 200 chuyển sang nhị phân là 11001000 sẽ có LSB là 0 Ý tưởng của thuật toán này là sẽ thay thế các bit LSB của từng byte trong giá trị RGB của từng Pixel. Sỡ dĩ chúng ta chỉ thay thế các bit LSB là vì sau khi t PHP Race Condition Vulnerability ExampleThis article based-on the excellent article " Practical Race Condition Vulnerabilities in Web Applications ". I have made my own sample source-code for testing. ================ # Let's start! Log-into MySQL(or MariaDB) Shell to create sample database MariaDB [test]> create database test character set utf8 collate utf8_general_ci; MariaDB [test]> grant all privileges on test.* to test@'localhost' identified by 'test@123'; MariaDB [test]> flush privileges; MariaDB [test]> create table bank_accounts(uid int auto_increment primary key,ucode varchar(10) not null,balance int(11) not null default 0,uname varchar(50) not null); MariaDB [test]> insert into bank_accounts(ucode,uname,balance) values ('BANK000001','User 1',20000),('BANK000002','User 2',5500),('BANK000003','User 3',8700); We'll test with User-1's account. MariaDB [test]> select * from bank_accounts; +-----+-------- |