LWN.net Logo

Development

LinuxCon: Building a secure IP telephony system

September 30, 2009

This article was contributed by Nathan Willis

Free software running open Voice-over-IP (VoIP) standards like Session Initiation Protocol (SIP) are already an alternative to closed and proprietary voice services, but relatively few know that free software can also provide secure, end-to-end encrypted calling. On Wednesday afternoon at LinuxCon, David Sugar spoke about the work in this area being done in the GNU Telephony project's Secure Calling initiative. Sugar outlined the major pieces of secure voice communication, detailed the project's components — including GNU's implementation of ZRTP and the SIP Witch server — and discussed their usage in practical VoIP deployments.

GNU Telephony is an umbrella project that encompasses work on the (concurrently-developed) Bayonne and Bayonne 2 servers, SIP Witch, and a suite of libraries for implementing different parts of a VoIP stack: audio processing, Real-time Transport Protocol (RTP) media channels, and ZRTP encryption. The project also puts special emphasis on embedded applications with the GNU Telephony Open Embedded effort to port solutions to ARM hardware, and the uCommon library for lightweight C++ development.

Sugar started his talk with a brief history of the Secure Calling Initiative. Earnest interest in secure VoIP software dated back to 1999, he said, in reaction to the passage of the Communications Assistance for Law Enforcement Act (CALEA) act and its mandates for government-accessible backdoors in telephony equipment. Proprietary services like Skype may offer encryption, but without access to the source code it is impossible to know that no such back doors or simple security flaws exist.

A precondition to secure calling is a secure media path, but it took some time for a suitable, standards-based free software stack to evolve. The Secure RTP (SRTP) protocol was published in 2004, but it was not an end-to-end solution on its own, because it does not include secure cryptographic key exchange. The industry standard SDES exchanges both keys in the clear, Sugar noted, and public key authority systems rely on trusting third parties.

That situation changed in 2005 when Phil Zimmermann released the ZRTP key agreement protocol. ZRTP uses Diffie-Hellman key exchange between the two callers, but adds a "social key exchange" factor to prevent man-in-the-middle attack. Each user hashes together their own public key with the other caller's public key; the result is a Short Authentication String (SAS) that can be exchanged and verified by the callers verbally. Once the setup is established, the media stream is encrypted using standard SRTP.

As with the original PGP, however, Zimmermann's implementation of ZRTP was not free software. In 2006, Werner Dittmann developed a ZRTP implementation as an extension to the GNU RTP stack ccRTP, thus immediately making it possible to use ZRTP with softphones already using ccRTP, such as the popular Twinkle client. Since then, a second GNU implementation project called ZRTP4J was developed to bring ZRTP support to Java applications, including SIP Communicator.

SIP Witch, call serving, and the CIA

Making end-to-end secure calling usable for the average user still required a call-registration and setup server, though. GNU Telephony wanted to avoid building a complete phone switch similar to Asterisk, said Sugar, because it wanted to separate call serving from the potentially patent-encumbered task of media encoding and decoding.

The result is SIP Witch, a gateway that negotiates call setup with ZRTP, but is free from the compute-bound tasks of audio codec processing. A side effect of separating SIP Witch's call negotiation features from media processing is that it enables secure call setup, but at no cost to latency. Furthermore, once the secure call is established, SIP Witch hands off the connection to the clients, so it can handle potentially thousands of calls on modest hardware.

In contrast, Asterisk handles SIP registration, call set-up, codec negotiation, and encodes and decodes audio — but still does not support ZRTP/SRTP. Other popular SIP registration servers, such as SIP Express Router (SER), similarly build in additional features like load-balancing and media relaying, that also require more processing and potentially add latency.

Nevertheless, SIP Witch is designed to coexist with and interoperate with other telephony servers, Sugar explained. SIP Witch can sit in front of Asterisk and intercept ZRTP requests, directing them to an encrypted softphone, but permit unencrypted calls to pass through to the Asterisk server. Multiple SIP Witch servers can also operate together, directing calls to extensions on different nodes, thus making it suitable for large site-wide deployments.

In a side note, Sugar told of one of the SIP Witch-plus-ZRTP solution's first deployments "in the wild." The callers were a world-famous pair of Latin American heads of state with well-known animosity towards the US government. Prior to SIP Witch, their phone conversations were regularly intercepted and played back in the news media. After SIP Witch, the interceptions appear to have stopped.

That use case might make some feel uncomfortable (depending on their nationality and politics), but Sugar stressed repeatedly that the purpose of secure calling is not to prevent lawful interceptions or block subpoenaed wiretaps; it is to prevent illegal surveillance. Wiretaps that are court authorized can still be executed, he said, perhaps by installing logging or audio recording software on the caller's computer. Granting the access to place such software is no different than granting access to an office to hide a bug inside the ceiling, and it is subject to judicial oversight. End-to-end VoIP encryption just prevents unauthorized eavesdropping, something that is relatively easy for unencrypted Internet-based communication.

Developing applications and services with GNU Telephony

Sugar postulated many potential uses for SIP Witch beyond the dedicated home hacker's private line. Because of its modest CPU requirements, it is a good candidate not only for the typical private branch exchange (PBX) found in a office deployment, but remotely hosted telephone services as well, including low-cost community telecenters. SIP Witch could even run on cloud computing services, Sugar added, providing a scalable, secure calling alternative to closed systems like Skype.

One of the Secure Calling Initiative's primary goals is to make secure telephony simple enough to use that non-technical users will use it regularly. Sugar said that the goal has not yet been achieved, but he is optimistic. Already, the SIP Witch and GNU ZRTP stack is simple enough that organizations and governments set it up for site-wide usage, he said, and although it will get easier in the future, the quickest path forward for casual users may be on mobile devices instead. The Java-based ZRTP4J library is aimed at such portable use, and Sugar has been working implementing ZRTP over GSM cellular radios.

Looking forward, Sugar spoke about Zimmermann's "PBX Enrollment" feature, an extension to the Asterisk server that allows it to perform ZRTP key- and SAS-exchanges. Again, though, Zimmermann's code is not available under the GPL, so it cannot be incorporated into the GPL-licensed version of Asterisk.

Finally, Sugar took questions from the audience, including several on the problem of extending secure calling to multi-party conference calls. Secure multi-party calling remains unsolved, he said. Conference calling involves mixing multiple audio streams, which means decrypting them. The current secure calling models involve point-to-point media streams designed to be secure against eavesdropping; the key exchange protocol does not allow for more than two parties to determine the "shared secret" session key that encrypts the audio channel.

One possible solution would involve separate secure channels between every pair of callers, mixing the audio entirely on the client side, but the bandwidth required increases geometrically with the number of call participants. Nevertheless, Sugar said, there is interesting work being done in multi-party conferencing, including 3-D audio positioning that gives every individual caller a virtual location by mixing the stereo audio signal accordingly. The result is a multi-party conversation that is considerably easier to follow than the all-speakers-from-one-point audio found on conventional land-line party calls.

Secure calling with free software is easier today than ever before, but Sugar and GNU Telephony are not content with its availability. Sugar recently started work at Canonical, and is working on making ZRTP libraries and SIP Witch available for Debian and Ubuntu. They are expected to ship with Ubuntu 9.10, but Sugar also provides packages through his Personal Package Archive. With luck, the increased exposure through Ubuntu will encourage more people to try ZRTP-secured calls and, perhaps, eventually make them commonplace.

Comments (5 posted)

System Applications

Audio Projects

ncmpc 0.15 released

Version 0.15 of ncmpc, a client of the Music Player Daemon, has been announced. "Changes include an improved build, updated lyricwiki plugin, fixed bugs and a tweaked display. "

Comments (none posted)

Rockbox 3.4 released

Rockbox 3.4 - a replacement firmware for a number of digital media players - has been released. New features include a number of added codecs, a pitch detector plugin, a time-stretching feature, the ability to control music players on a PC from the Rockbox device, and more. See the release notes for details.

Full Story (comments: 1)

Database Software

PostgreSQL Weekly News

The September 27, 2009 edition of the PostgreSQL Weekly News is online with the latest PostgreSQL DBMS articles and resources.

Full Story (comments: none)

SQLObject 0.10.8 released

Version 0.10.8 of SQLObject, an object-relational mapper, has been announced. "I'm pleased to announce version 0.10.8, a minor bugfix release of 0.10 branch of SQLObject."

Full Story (comments: none)

SQLObject 0.11.2 released

Version 0.11.2 of SQLObject, an object-relational mapper, has been announced. "I'm pleased to announce version 0.11.2, a minor bugfix release of 0.11 branch of SQLObject."

Full Story (comments: none)

Interoperability

Samba Team Blog #2

The Samba Team has published Blog #2. "The Team attended the Storage Network Industry Association plugfest last week. If you haven't been to one, a plugfest is a technical event where engineers from many different companies get together and participate in fixing bugs, working together and making our systems interoperate."

Comments (none posted)

Web Site Development

Sneaky web server 0.1 announced

Version 0.1 of Sneaky web server has been announced. "A fast portable pure-python multithreaded experimental WSGI web server in 300 lines of code".

Full Story (comments: none)

Tinyproxy version 1.6.5 is now available

Version 1.6.5 of Tinyproxy has been announced, it includes several bug fixes. "Tinyproxy is a light-weight HTTP proxy daemon for POSIX operating systems. It is distributed using the GNU GPL license version 2 or above. Designed from the ground up to be fast and yet small, it is an ideal solution for use cases such as embedded deployments where a full featured HTTP proxy is required, but the system resources for a larger proxy are unavailable."

Full Story (comments: none)

Desktop Applications

Audio Applications

libtheora 1.1 released

The libtheora 1.1 release has been announced. It looks like a fairly major step forward for the theora codec. "This release incorporates all the work we've been doing over the last year, and the encoder has been completely rewritten, although some of the code had its genesis way back in 2003. It also brings substantial performance and robustness improvements to the 1.0 decoder."

Comments (70 posted)

Data Visualization

matplotlib 0.99.1 released

Version 0.99.1 of matplotlib, a data visualization package, is out with several bug fixes. See the CHANGELOG file for details.

Comments (none posted)

Veusz 1.5 released

Version 1.5 of Veusz has been announced, it includes new capabilities and bug fixes. "Veusz is a Qt4 based scientific plotting package. It is written in Python, using PyQt4 for display and user-interfaces, and numpy for handling the numeric data. Veusz is designed to produce publication-ready Postscript/PDF output. The user interface aims to be simple, consistent and powerful."

Full Story (comments: none)

Desktop Environments

FVWM 2.5.28 released

Version 2.5.28 of FVWM has been announced, it includes new features and bug fixes. See the change log for details. (Thanks to Christoph Fritz).

Comments (2 posted)

Celebrating the release of GNOME 2.28

Version 2.28 of GNOME has been announced. "Today, the GNOME Project celebrates the release of GNOME 2.28, the latest version of the popular, multi-platform free desktop environment and of its developer platform. Released on schedule, to the day, GNOME 2.28 builds on top of a long series of successful six months releases to offer the best experience to users and developers."

Full Story (comments: 37)

Linux garden gets a new GNOME with version 2.28 (ars technica)

ars technica takes a look at the recently released GNOME 2.28. "The developers behind the open source GNOME desktop environment have announced the official release of version 2.28. This version brings a handful of noteworthy improvements such as a new Bluetooth configuration tool and user interface refinements in numerous applications. One of the most significant changes is the adoption of Apple's WebKit HTML rendering engine for GNOME's Epiphany Web browser."

Comments (1 posted)

GNOME Software Announcements

The following new GNOME software has been announced this week: You can find more new GNOME software releases at gnomefiles.org.

Comments (none posted)

KDE Software Announcements

The following new KDE software has been announced this week: You can find more new KDE software releases at kde-apps.org.

Comments (none posted)

What I Did On My Summer Holiday (KDE.News)

KDE.News has a look at the 37 Google Summer of Code projects that were completed for various KDE programs. Screen shots and brief interviews with the students are included. "Much of the work done during these projects is already merged into trunk and will be available for the users with the KDE 4.4 release in January 2010."

Comments (none posted)

Xorg Software Announcements

The following new Xorg software has been announced this week: More information can be found on the X.Org Foundation wiki.

Comments (none posted)

Games

Albow 2.1 released

Version 2.1 of Albow has been announced, it adds some new capabilities. "Albow is a library for creating GUIs using PyGame that I have been developing over the course of several PyWeek competitions. I am documenting and releasing it as a separate package so that others may benefit from it, and so that it will be permissible for use in future PyGame entries."

Full Story (comments: none)

Graphics

Inkscape 0.47pre3 is out

Version 0.47pre3 of the Inkscape vector graphics editor has been announced. "The presumably last prerelease of 0.47 is out. Please fetch the files, test and let us know about bugs you run into. Date of final version's release is currently estimated as two weeks away from now."

Comments (none posted)

GUI Packages

FLTK 1.1.10rc2 is now out

Version 1.1.10 rc2 of FLTK has been announced. "1.1.10 *will* be the last 1.1 release. After releasing the 1.1.10 final version, no more STDs against 1.1 will be possible. I will not reopen 1.1. There will be no 1.1.11. Nope. None. Nix."

Comments (none posted)

PyQt 4.6 released

Version 4.6 of PyQt has been announced. "The highlights of this release include: - alternate, more Pythonic, APIs have been implemented for QDate, QDateTime, QString, QTextStream, QTime, QUrl and QVariant. Applications may select a particular API. By default Python v3 uses the new versions and Python v2 uses the old versions. - Qt properties can be initialised, and signals connected using keyword arguments passed when creating an instance. Properties and signals can also be set using the QObject.pyqtConfigure() method."

Full Story (comments: none)

Interoperability

Wine 1.1.30 announced

Version 1.1.30 of Wine has been announced. Changes include: "- Support for OpenAL. - Many improvements in HTML and JavaScript support. - Many common controls fixes and improvements. - More Direct3D 10 work. - Better MAPI support. - Various bug fixes."

Comments (none posted)

Miscellaneous

agenda2pdf 1.0 released

Version 1.0 of agenda2pdf has been announced. "This is a simple script which generates a book agenda file in PDF format, ready to be printed or loaded on an ebook reader. You can choose among different sections. Each section have pdf links to other parts of the agenda. I've created it for using with my iLiad eBook reader."

Full Story (comments: none)

Languages and Tools

Caml

Caml Weekly News

The September 29, 2009 edition of the Caml Weekly News is out with new articles about the Caml language.

Full Story (comments: none)

Python

CodeInvestigator 0.16.0 released

Version 0.16.0 of CodeInvestigator is out, it includes a number of bug fixes. "CodeInvestigator is a tracing tool for Python programs. Running a program through CodeInvestigator creates a recording. Program flow, function calls, variable values and conditions are all stored for every line the program executes. The recording is then viewed with an interface consisting of the code. The code can be clicked: A clicked variable displays its value, a clicked loop displays its iterations."

Full Story (comments: none)

Cython 0.11.3 released

Version 0.11.3 of Cython, a C extension language for Python, has been announced. "We are happy to announce the release of Cython 0.11.3, which is the accumulation of numerous bugfixes and other work since the beginning of the summer. Some new features include a cython freeze utility that allows one to compile several modules into a single executable (Mark Lodato) and the ability to enable profiling Cython code with Python profilers using the new cython.profile directive. We also had two successful summer of code projects, but neither is quite ready to be merged in at this time. This will probably be the last minor release before Cython 0.12."

Full Story (comments: none)

Distribute 0.6.2 released

Version 0.6.2 of Distribute, a Python packaging system, has been announced. "This release is the first release that is compatible with Python 3, kudos to Martin von Löwis, Lennart Regebro and Alex Grönholm and the ones I am missing, on this work !"

Full Story (comments: none)

Jython 2.5.1 final is out

Version 2.5.1 of Jython, an implementation of Python in Java, has been announced. "Jython 2.5.1 fixes a number of bugs, including some major errors when using coroutines and when using relative imports, as well as a potential data loss bug when writing to files in append mode."

Full Story (comments: none)

python-colormath 1.0.5 Released

Version 1.0.5 of python-colormath has been announced. "An error in the CIE2000 Delta E equation has been found and corrected, necessitating the immediate release of python-colormath 1.0.5. All users of the 1.x series are encouraged to upgrade to avoid this mathematical error."

Full Story (comments: none)

python-daemon 1.5.1 released

Version 1.5.1 of python-daemon has been announced. "Since version 1.4.8 the following significant improvements have been made: * Raise specific errors on failures from the library, distinguishing different conditions better. * Write the PID file using correct OS locking and permissions. * Implement 'PIDLockFile' as subclass of 'lockfile.LinkFileLock'..."

Full Story (comments: none)

python-fedex 1.0 Released

Version 1.0 of python-fedex has been announced. "This GPLv3 module is a very light wrapper around the excellent suds SOAP module and FedEx's Web Services WSDLs. The purpose of this module is to prepare the WSDL objects for the user to populate and manipulate as needed, as well as handling sending and light processing for common errors. python-fedex leaves the user to read FedEx's documentation to understand all of the fields exposed by python-fedex."

Full Story (comments: none)

SIP 4.9 released

Version 4.9 of SIP, a Python bindings generator, has been announced. "The main focus of this release is to allow alternate, incompatible wrappings of classes and functions to be defined which can then be selected by an application at runtime. This allows application developers to manage the migration from an old, deprecated API to a new one."

Full Story (comments: none)

Python-URL! - weekly Python news and links

The September 26, 2009 edition of the Python-URL! is online with a new collection of Python article links.

Full Story (comments: none)

Build Tools

ControlTier 3.4.8 released

Version 3.4.8 of ControlTier has been announced. "ControlTier is a cross-platform build and deployment framework and toolkit. ControlTier coordinates service management activities across multiple nodes and application tiers. It supplements and replaces homegrown service management and deployment scripts with a well-defined set of lifecycle commands that abstract the details of various types of deployments."

Full Story (comments: none)

Libraries

mds-utils 1.1.0 released

Version 1.1.0 of mds-utils has been announced. "It's a C++ library composed by different utilities. Amongst its features it contains classes to treat a FILE* as a C++ stream. It contains also some utilities for developing C++ Python extensions."

Full Story (comments: none)

Page editor: Forrest Cook
Next page: Announcements>>

Copyright © 2009, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds