PeerSec Networks - Secure Device Web Services
 

February 26, 2004

MatrixSSL on the WRT54G

Announcements

wrt54g.jpg
We've built MatrixSSL for the Linksys WRT54G wireless router. This is a linux based router that has open firmware available directly from the manufacturer. Here are the specs: Developing for this platform is very straightforward and shows how easy it is to port Linux applications to embedded Linux. No changes to MatrixSSL code are required for embedded Linux, just point the Makefile at the relevant cross compiler and you're good to go. Here are some performance numbers running our https server on the WRT54G:

February 26, 2004 | Comments (0)

February 18, 2004

Mozilla Cipher Suites

Support

Update: Fixed in Beta2 R2
Mozilla 1.2, which ships with RedHat Linux 9.0 does not contain support for the default cipher suite built with MatrixSSL. When trying to access a server running MatrixSSL through https, Mozilla will display the following error: "Mozilla and 'host' cannot communicate because they have no common encryption algorithms." It appears this version of Mozilla has support for the other two built in MatrixSSL cipher suites (ARC4-MD5 and 3DES-SHA). A workaround is to enable one of the other supported cipher suites in matrixssl/src/matrixConfig.h and recompile MatrixSSL. Alternatively, upgrading to Mozilla 1.5 or 1.6 will fix the incompatibility.

Future releases of MatrixSSL will come with more cipher suites enabled by default to provide additional compatibility. Support for export ciphers is not planned, however. This means that browsers supporting only export level encryption will need to be updated to communicate with MatrixSSL.

February 18, 2004 | Comments (0)

February 12, 2004

MatrixSSL on freshmeat.net

Announcements

We've registered MatrixSSL with freshmeat.net: http://freshmeat.net/projects/matrixssl. Freshmeat is run by the same parent company as Slashdot, and is a searchable repository of open source projects. Users can sign up to be notified when new releases are available for projects they use. We provide a similar feature through our XML RSS feed.

February 12, 2004 | Comments (0)

February 06, 2004

MatrixSSL OS Calls

Support

The following operating system calls are used within MatrixSSL. Justification and alternatives for each set of calls is given.

Memory Allocation
malloc()
realloc()
free()
calloc()
Memory allocation is done with pre-determined buffer sizes in most cases. The RSA code uses various memory sizes however, so arbitrary block allocation must be supported in a custom implementation of these routines. Any suitable library replacement for standard memory allocation semantics can be used with MatrixSSL. Example implementations of these functions are included in matrixssl/src/os/malloc.c
Memory Operations
memcmp()
memcpy()
memset()
strstr()
strlen()
These functions can easily be replaced with custom implementations, should they not be present in the standard platform library.
File Access
stat()
fopen()
fclose()
fgets()
File access functions are used only to read certificate and private key files. If a filesystem is not supported, the matrixSslReadKeysMem() API, defined in matrixInternal.h can be used to parse certificates and keys from memory buffers, allowing operation without a filesystem. Disable the USE_FILE_SYSTEM define in matrixConfig.h to disable the file system calls on systems that do not support them.
Time
time() The time() routine is used to check expiration of the session cache, and to provide the first four bytes of the ServerRandom value. Any known-scale time value such as clock ticks since startup can be used for the first value. The ServerRandom value should have a monotonically increasing value that is preserved across machine restarts to help prevent replay based attacks. Intel platforms use a processor dependant high resolution timer rather than the time() system call.
Debugging
printf()
abort()
These functions are used only for debugging and can easily be replaced by other mechanisms of error reporting.
Multithreading
Mutex APIs
Mutex locks are used only to protect the session cache if multiple threads have simultaneous sessions open. Systems without mutex support typically also lack threading support so these functions should not need to be ported. Disabling the USE_MULTITHREADING define in matrixConfig.h will disable all mutex code. The abstraction layer for thread synchronization is in the OS specific directories under matrixssl/src/os.
Forked Processing
 
Applications using fork() to handle new connections are common on Unix based platforms. Because the MatrixSSL session cache is located in the process data space, a forked process will not be able to update the master session cache, thereby preventing future sessions from being able to take advantage of this speed improvement. In order to support session resumption in forked servers, a file or shared memory based session cache must be implemented. Please contact us for additional help in this area.
Networking
Sockets APIs
MatrixSSL operates independently from the network layer. Existing socket code tuned to your platform can continue to send and receive data that is encoded and decoded by MatrixSSL in memory.
Entropy Gathering
Random Data In order to create a secure SSL connection, it is critical to have a source of good random data on each platform. Ports of MatrixSSL to any platform must support the gathering of cryptographically random entropy bytes. Operating systems typically provide this data through kernel level timers, random keyboard events, etc. Embedded systems are much more predictable in terms of user and kernel timings, so drivers for hardware based entropy are usually used in this case. The built in entropy gathering API, sslGetEntropy() is implemented in the OS specific directories under matrixssl/src/os.
February 06, 2004 | Comments (0)

February 05, 2004

Linuxdevices.com Article

Announcements

LinuxDevices.com caught our post to openssl-dev and wrote up a little article on MatrixSSL.

February 05, 2004 | Comments (0)

February 04, 2004

Beta Feedback

Support

We've put together a preliminary list of items we're looking for feedback on during the beta process:


February 04, 2004 | Comments (0)

Archives | March 2010 | November 2009 | June 2009 | September 2008 | March 2008 | February 2007 | October 2006 | July 2006 | April 2006 | November 2005 | September 2005 | August 2005 | April 2005 | February 2005 | September 2004 | August 2004 | July 2004 | June 2004 | May 2004 | April 2004 | March 2004 | February 2004 | January 2004 |