Computers & Mobile Technology
VOIP ideal for hiding secret messages?
ren2aircr.jpg

The 50-cent word here is “steganography,” which per Wikipedia is “the art and science of writing hidden messages in such a way that no one, apart from the sender and intended recipient, suspects the existence of the message.” You may have heard, for instance, that you can encode a hidden message in, say, an image file, in such a way that no one who wasn’t looking for it would know that it’s there.

Well, this morning Danger Room linked to a post at IEEE Spectrum to the effect that Voice Over Internet Protocol (VOIP) is particularly susceptible to steganographic hijinks. Wired’s David Pierce put it this way:

There’s only the smallest possible time for interception to happen since all data is stored locally rather than redirected through a central server. Plus, since so much data is being sent back and forth, large messages can be sent without causing any alarm. Unlike an image or video, which can be downloaded and analyzed at anytime, there’s no way to get at and store files sent with VoIP.

18 thoughts on “VOIP ideal for hiding secret messages?

    1. Awesome.

      I think you should start a weekly contest to find your hidden waldos!

      Of course, with all of the crypto fans out there, I’d never stand a chance of winning…

  1. Maybe we should stop communication, because secret messages could be sent!

    Also, I think I heard that some people use languages when communicating that not everybody understands, which seems to be a cause for concern.

  2. I wanted to try this myself after reading this and the Wikipedia page, so I downloaded the example image from Wikipedia: http://en.wikipedia.org/wiki/File:StenographyOriginal.png

    and wrote some Matlab code to get the hidden image out. I know that Matlab isn’t standard for photo editing, but I’m an engineer and it’s what I know…

    There must be equivalents to these commands in other popular languages.

    >> orig=imread(‘StenographyOriginal.png’); %import image
    >> imshow(orig); title(‘original image’)
    >> bit1=bitget(orig(:,:,:),1); %least significant bit (:,:,: -> all rows, cols, colors)
    >> bit2=bitget(orig(:,:,:),2); %second least sig bit
    >> bits=bitset(bit1(:,:,:),2,bit2); %set 2nd bit of bit1 to be value from bit2
    >> hidden_img=bits*85; %make 85 times brighter
    >> figure %new figure
    >> imshow(hidden_img); title(‘extracted image’)

    Now, I’ll take some of my own images, compress them to 2 bit depth (divide and round the matrix in Matlab), and use bitset to copy those values onto another image cropped to the same size.

    This may be common sense to a lot of people, but I was a little proud of myself for figuring it out.

    1. I thought I just caught a typo in my link and code (Stenography vs. Steganography), but it turns out the typo was in the original file from Wikipedia, so it should be fine, FYI.

    2. I know little about the math, but I would not have expected that it could be done with so few lines of code. Nice.

  3. “Unlike an image or video, which can be downloaded and analyzed at anytime, there’s no way to get at and store files sent with VoIP.”

    Er, unless the operator of the switch you’re using turns on call recording …

    I’d like to see how the steg data survives a transcode, too!

Comments are closed.

Tagged

I am descended from 5,000 generations of tool-using primates. Also, I went to college and stuff. I am a long-time contributor to MAKE magazine and makezine.com. My work has also appeared in ReadyMade, c't – Magazin für Computertechnik, and The Wall Street Journal.

View more articles by Sean Michael Ragan