Skip to main content

Resono 🎵🔒

A sophisticated audio steganography tool that uses phase coding techniques to hide encrypted text messages within audio files. Resono combines cryptographic security with advanced signal processing to provide a robust solution for covert communication.

🌟 Features

  • Phase-based Steganography: Utilizes phase manipulation in the frequency domain to embed data imperceptibly
  • AES Encryption: All hidden messages are encrypted using AES-256 in EAX mode before embedding
  • Key-based Security: Uses password-derived keys for both encryption and pseudorandom frequency bin selection
  • Audio Format Support: Works with WAV files (mono and stereo)
  • Data Integrity: Includes CRC32 checksums to detect corruption or tampering
  • Flexible Capacity: Automatically calculates embedding capacity based on audio length
  • Robust Error Handling: Comprehensive validation and error reporting

🔧 Quick Start

Prerequisites

  • Python 3.6+
  • Required packages:
pip install numpy scipy pycryptodome

Installation

pip install resono

One-Line Installation

# System-wide (with sudo)
curl -sSL https://raw.githubusercontent.com/kaizoku73/Resono/main/install.sh | sudo bash

# User installation (no sudo)
curl -sSL https://raw.githubusercontent.com/kaizoku73/Resono/main/install.sh | bash

Uninstallation

# To uninstall Resono (no sudo):
curl -sSL https://raw.githubusercontent.com/kaizoku73/Resono/main/uninstall.sh | bash

# To uninstall Resono (With sudo):
curl -sSL https://raw.githubusercontent.com/kaizoku73/Resono/main/uninstall.sh | sudo bash

Clone the Repository

git clone https://github.com/kaizoku73/Resono.git
cd Resono

🚀 Usage

Resono provides a simple command-line interface for both embedding and extracting hidden messages.

Embedding a Message

resono embed --in "Your secret message here" --cover input_audio.wav --key "your_secret_password"

Parameters:

  • --in: The text message to hide (max 100 characters)
  • --cover: Path to the cover audio file (WAV format)
  • --key: Secret password for encryption and embedding

Output: Creates encoded.wav with the hidden message

Extracting a Message

resono extract --stego encoded.wav --key "your_secret_password"

Parameters:

  • --stego: Path to the audio file containing the hidden message
  • --key: The same secret password used for embedding

🔬 How It Works

1. Message Preparation

  • Input text is padded to 100 characters using white spaces
  • Message is encrypted using AES-256 in EAX mode
  • Length prefix and CRC32 checksum are added for integrity

2. Phase Encoding

  • Audio is processed in blocks using FFT (Fast Fourier Transform)
  • Frequency bins are selected pseudorandomly based on the key
  • Phase values are modified: +π/2 for bit '1', -π/2 for bit '0'
  • Mirror frequencies are adjusted to maintain audio quality

3. Audio Reconstruction

  • Modified frequency domain data is converted back using IFFT
  • Resulting audio maintains original characteristics while containing hidden data

4. Extraction Process

  • Reverse FFT analysis extracts phase information
  • Same pseudorandom sequence recovers embedded bits
  • Decryption and integrity verification reveal the original message

What is Phase coding and how does it work?

For a detailed explanation of Phase coding steganography and how it works, check out this article: https://kaizoku.gitbook.io/steganography/phase-coding-in-audio

📊 Technical Specifications

  • Encryption: AES-256 in EAX mode
  • Hash Function: SHA-256 for key derivation
  • Block Processing: Dynamic block sizing based on message length
  • Capacity: 8 bits per audio block
  • Audio Formats: 16-bit WAV files (mono/stereo)
  • Message Limit: 100 characters maximum
  • Integrity Check: CRC32 checksums

🎯 Advantages

  • Imperceptible: Phase changes are inaudible to human ears
  • Secure: Military-grade AES encryption protects message content
  • Robust: Error detection and correction mechanisms
  • Flexible: Works with various audio lengths and formats
  • Pseudorandom: Key-based frequency selection prevents pattern detection

⚠️ Limitations

  • Maximum message length: 100 characters
  • Requires sufficient audio length for embedding capacity
  • WAV format only (currently)
  • Both embedding and extraction require the same secret key

🔐 Security Considerations

  • Use strong, unique passwords for each hidden message
  • The security relies on keeping the password secret
  • Audio files may be subject to compression or conversion attacks
  • Consider additional obfuscation techniques for highly sensitive data

🤝 Contributing

Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.

📜 License

This project is licensed under the MIT License - see the LICENSE file for details.

⚖️ Disclaimer

This tool is for educational and research purposes. Users are responsible for complying with all applicable laws and regulations regarding encryption and steganography in their jurisdiction.

Support

If you encounter any issues or have questions, please open an issue on GitHub.


Resono - Where secrets hide in plain sound 🎵

Made by Kaizoku

Metadata

Release files for resono 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for resono 1.0.1
File Size Uploaded
resono-1.0.1.tar.gz 8.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for resono 1.0.1
File Interpreter ABI Platform
resono-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 17.7 kB

Release files / resono-1.0.1.tar.gz

Download URL resono-1.0.1.tar.gz
Size 8.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c00447bc7c297cf3b65fa90972240967a46deb1357d0b0c901545e32e2fa8f80
BLAKE2b-256 checksum
How to use checksums
96ad1df54d6fc151a26e6ca5f4b0973fc2df3f0320986465e1ff7d299dbd4061
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / resono-1.0.1-py3-none-any.whl

Download URL resono-1.0.1-py3-none-any.whl
Size 9.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d0b075f11caa54a4411b21dfbea556442571962d52cab3fb9b72fcba84011066
BLAKE2b-256 checksum
How to use checksums
1ed0c18ea8ba770aa92f28ab08d484efef82fcf0a9add8f7fa8037bbc0f81b3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page