RECENT BLOG NEWS
C# Wrapper for wolfSSL
wolfSSL has a new C# wrapper, allowing use of the wolfSSL embedded SSL/TLS library in a C# project. This will let users take advantage of the low footprint size of wolfSSL in IoT spaces that use the .NET framework. A Visual Studio project, along with server examples can be found in the directory “/wrapper/CSharp/”.
The wolfSSL C# wrapper is included in versions of wolfSSL beginning with 3.8.0. To download wolfSSL, visit the download page. More information about the wrapper and documentation can be found at the following links:
wolfSSL C# Wrapper
wolfSSL C# Manual
wolfSSL C# API Reference
For more info about using C# with wolfSSL, contact us at facts@wolfssl.com.
wolfSSL with ECDHE-PSK Cipher Suites
The wolfSSL embedded SSL/TLS library has added the option for using ECDHE-PSK cipher suites. This opens up using the small memory size ECC keys with PSK on embedded devices.
PSK (pre shared keys) is a viable option when controlling both ends of the connection. It allows for saving memory and computation time when performing a TLS handshake. Adding ECDHE gives the cipher suite perfect forward secrecy with using an ephemeral ECC key during the TLS handshake. Previously wolfSSL had DHE-PSK cipher suites but using ECDHE-PSK cipher suites will save even more memory, beneficial in resource-constrained, IoT devices.
The ECDHE-PSK cipher suites available to users include:
ECDHE-PSK-NULL-SHA256
ECDHE-PSK-AES128-CBC-SHA256
ECDHE-PSK-CHACHA20-POLY1305
wolfSSL announces wolfCLU (a command line utility)
wolfSSL has laid the groundwork for a portable command line utility. We wanted our community to be aware so you have the opportunity to begin using it with the wolfSSL embedded SSL/TLS library!
wolfCLU currently has the following features:
– Autoconf for portability
– Encrypt a file and store it locally on your computer
– Decrypt that file after it has been encrypted, or send it via email to your friend, if he/she knows the password and algorithm used for encryption, they can then decrypt it on their computer
– Hash a single file (IE a zip archive) for verification
– Benchmark the currently configured Algorithms
On the wolfCLU to-do-list:
– X509 Certificate generation
– X509 Certificate pem-to-der/der-to-pem
– FIPS certified build option
– Integration into wolfSSL distribution
Location:
https://github.com/wolfSSL/wolfssl-examples/tree/master/wolfCLU
Please head on over and check out the README!
https://github.com/wolfSSL/wolfssl-examples/blob/master/wolfCLU/README.md
wolfSSL with the Atmel Hardware-TLS Platform
wolfSSL has partnered with Atmel to provide users of the wolfSSL embedded SSL/TLS library the ability to take advantage of the Atmel ATECC508A crypto element. From the Atmel page:
“Due to lack of better alternatives, TLS implementations have historically stored private keys and authentication credentials in software where they are more vulnerable to attack. In addition, the mathematics used for authentication and asymmetric key agreement were also done in software which is less feasible in small IoT devices that have limited code space and processing power.
The Atmel Hardware-TLS platform provides an interface between software TLS packages and the ATECC508A cryptographic co-processor. wolfSSL and OpenSSL implementations can now utilize hardware-based secure storage for private keys and authentication data and also allow resource-constrained IoT nodes to implement full elliptic curve authentication and Diffie-Hellman key agreement and session key derivation. With Atmel HW-TLS, TLS communications links can have hardened security even out to the smallest IoT edge node.”
Full details can be found on the Atmel website:
http://www.atmel.com/tools/Atmel-HW-TLS.aspx
Contact us at facts@wolfssl.com with any questions or to inquire about using wolfSSL on the Atmel ATECC508A.
wolfSSL Version 3.9.0 Released
A new release of wolfSSL is now available. Version 3.9.0 of the industry leading embedded SSL/TLS library has a number of additions, updates, and fixes. With the addition of ports to both Arduino boards and to the Nordic nRF51 board wolfSSL is adding to its ever increasing IoT use. This release version also has an update to the progressive ChaCha20-Poly1305 cipher suites, allowing for use with PSK and increased interoperability.
There is no high level, urgent, fixes but we always suggest keeping up to date with the most current version of wolfSSL. By default FP_ECC is turned off, but users who have manually enabled this feature should update to wolfSSL 3.9.0 for the fix of a zero hash bug.
– Add new leantls configuration
– Add RSA OAEP padding at wolfCrypt level
– Add Arduino port and example client
– Add fixed point DH operation
– Add CUSTOM_RAND_GENRATE_SEED_OS and CUSTOM_RAND_GENERATE_BLOCK
– Add ECDHE-PSK cipher suites
– Add PSK ChaCha20-Poly1305 cipher suites
– Add option for fail on no peer cert except PSK suites
– Add port for Nordic nRF51
– Add additional ECC NIST test vectors for 256, 384 and 521
– Add more granular ECC, Ed25519/Curve25519 and AES configs
– Update to ChaCha20-Poly1305
– Update support for Freescale KSDK 1.3.0
– Update DER buffer handling code, refactoring and reducing memory
– Fix to AESNI 192 bit key expansion
– Fix to C# wrapper character encoding
– Fix sequence number issue with DTLS epoch 0 messages
– Fix RNGA with K64 build
– Fix ASN.1 X509 V3 certificate policy extension parsing
– Fix potential free of uninitialized RSA key in asn.c
– Fix potential underflow when using ECC build with FP_ECC
– Fixes for warnings in Visual Studio 2015 build
For more information about wolfSSL contact us at facts@wolfssl.com
wolfSSL and CyaSSL are Not Vulnerable to DROWN Attack
The recently-announced DROWN attack allows attackers to decrypt TLS sessions by taking advantage of servers that support SSLv2 and EXPORT cipher suites. SSL 2.0 was the first version of the SSL/TLS protocol standard released, and has been known to be insecure for many years now.
wolfSSL has never supported SSL 2.0 and has never had support for EXPORT grade cipher suites. As such, users of wolfSSL (formerly CyaSSL) are safe from DROWN.
Please contact us at facts@wolfssl.com if you have further concerns or questions.
References:
DROWN Attack
CVE-2016-0800
Free Early Warning on Breaches
Hi! Please email us if you want to join our Free Early Warning list. We will put you on our list of people to tell when there is a breach or vulnerability. Email us at facts@wolfssl.com with the subject Free Early Warning in the subject, and we’ll add you to the list.
Transport-level security tradeoffs using MQTT
By Todd Ouska, wolfSSL
The Message Queuing Telemetry Transport protocol, or MQTT, has become a favorite of Internet of Things (IoT) developers, and why not? It’s incredibly lightweight (on the order of a couple Kb for client implementations), has easy-to-use APIs, and is available for free under the Eclipse Public License (EPL). If your connected application is something simple and relatively contained – like remote monitoring the temperature in your living room, for example – that much is probably enough to make you happy.
But what if your application is a little more complex? Say you’re combining multiple sensors, an HVAC system, a little intelligence, and MQTT to automatically adjust the climate in your home based on occupancy, and you’ve also configured remote management into the application so you can manually override instances where your dog tripped the infrared proximity sensor (sorry, Spot). Or maybe after some hard work you’re deploying a similar commercial system and need to update a sensor platform’s firmware to provide more precise measurements. So at what point is “enough” good enough? The answer depends on you and your application.
MQTT is a publish/subscribe protocol, meaning that would-be “clients” in the traditional networking model can act as both publishers of and subscribers to messages related to particular topics. Messages are distributed using the transmission control protocol (TCP), but rather than being indiscriminately broadcast, clients send messages through a central MQTT broker that accepts messages from a publisher and distributes them to the subscriber(s) to that topic at varying quality of service (QoS) levels.
However, in order to keep the protocol as lightweight as possible for resource-constrained IoT edge devices, the MQTT specification offers nothing on top of TCP for security outside of a recommendation that the transport layer security (TLS) protocol be used for applications that require additional levels of authentication. As a result, MQTT communications that rely on TCP alone are unencrypted and susceptible to man-in-the-middle attacks.
To illustrate what this means in more detail, let’s go back to our two “complex” examples from earlier. Say a proximity sensing platform publishes a message to the MQTT broker with the topic “home/occupancy.” The MQTT protocol does allow the use of a username and password for client identification, but these are displayed in text if some form of encryption isn’t used. Therefore, an eavesdropper could potentially impersonate a client subscriber and decrypt a message payload, or even imitate a client publisher and issue fake or modified messages. In terms of the personal home application this could signal to prospective thieves that no one is home, and in the commercial deployment scenario has serious implications on processes like remote firmware updates.
TLS tradeoffs
As mentioned, the MQTT protocol does recommend the use of TLS for more sensitive MQTT implementations, and a network port (port 8883) has even been reserved for this purpose. TLS is the successor of the secure sockets layer (SSL) protocol, and provides an encrypted communication channel over which MQTT messages can be sent. Before the channel is established TLS uses a handshake to pass certificates (or keys) from the publisher to the broker, but also between the broker and subscribers. If successful a secure channel is established, if not, the connection is aborted. Easy enough, right?
Well, maybe not. The downside of using TLS, SSL, and other methods of encryption is that they can add significant overhead, which is probably why you chose to use MQTT in the first place. For example, at wolfSSL we recently released an MQTT client library (wolfMQTT) with a compiled size of 3.6 kB. A TLS handshake alone can consume that much, without accounting for the encryption overhead on the individual packets themselves. For certain resource-constrained embedded devices, particularly those based on small microcontrollers, this added workload can simply consume too much in terms of CPU resources.
Techniques such as session resumption can compensate for some of the connection costs of TLS, and hardware acceleration is also a method for reducing the size penalty for encryption. Another important consideration is selecting an optimized encryption library when securing system communications, and in the case of wolfMQTT, integrating the lightweight wolfSSL embedded SSL/TLS library resulted in a compiled size of 20-30 kB when paired with hardware acceleration.
In the end, the decision when and how to implement security in your MQTT-based IoT system depends on you and your application. If you decide to move forward with transport-layer encryption, some best practices include working with MQTT libraries that are open source and allow you to look under the hood, but also provide documentation and examples of how encryption could be implemented in your application. If you’re a commercial entity using MQTT, make sure to partner with a vendor that has security credentials and also supports the widest range of operating systems and embedded chipsets possible in order to avoid lock-in.
For more, check out our secure firmware update example written in C that demonstrates encrypted communications to and from an MQTT broker using TLS.
Todd Ouska is Co-Founder and CTO of wolfSSL.
wolfSSL
www.wolfssl.com
@wolfSSL
LinkedIn: www.linkedin.com/company/wolfssl
Facebook: www.facebook.com/wolfssl
wolfSSL Adds Secure SSL/TLS Encryption to MQTT IoT Protocol in Lightweight wolfMQTT Library
wolfSSL recently published a press released talking about the release of wolfMQTT, and its use with the wolfSSL embedded SSL/TLS library:
“3.6 kB MQTT client implementation easily integrates with the wolfSSL embedded SSL library for resource-constrained Internet of Things devices and connected applications.
wolfSSL, a leading provider of security and connectivity solutions for the embedded, machine-to-machine (M2M), and Internet of Things (IoT) markets, has announced the release of wolfMQTT, a client implementation of the Message Queuing Telemetry Transport (MQTT) protocol that provides lightweight, portable, and secure publish/subscribe messaging for developers of connected applications. Developed from scratch and written in native C, wolfMQTT has a compiled size of only 3.6 kB and is available for use under commercial or open source (GPLv 2) licenses.
By design, MQTT relies solely on the transmission control protocol (TCP) to limit overhead in resource-constrained embedded devices, but offers no provisions for security or encryption. Based on the MQTT v3.1.1 specification and supporting quality of service (QoS) levels 0-2, wolfMQTT provides SSL/TLS (Secure Sockets Layer/Transport Layer Security) encryption through the wolfSSL library, adding as little as 20-30 kB when paired with hardware acceleration to prevent eavesdropping and man-in-the-middle attacks. In addition, techniques like TLS session resumption can further reduce connection costs for sensor devices or other platforms with limited resources.”
You can read the entire article here. If you would like more information about running wolfMQTT or wolfSSL in your environment, please contact us at facts@wolfssl.com
Reference: http://www.prweb.com/releases/2016/02/prweb13221670.htm
Secure Email Client with Freescale KSDK + wolfSSL + FRDM-K64F
Are you interested in having a secure email client on your Freescale Kinetis device? How about one that uses wolfSSL too!
A member of the Freescale/NXP community (Denis Shimizu) recently adapted the original SMTP protocol implementation that is included with KSDK 1.3 to add in secure connections using the wolfSSL lightweight SSL/TLS library.
The example software is currently ported to the FRDM-K64F Kinetis board, but can be implemented on other boards as well. This demo sends an email using the GMail SMTP server (smtp.gmail.com, port 465) through a secure SSL/TLS channel.
For the details and code, please visit the following page on the Freescale/NXP Community website:
https://community.NXP.com/docs/DOC-329650
wolfSSL has been ported to the Freescale Coldfire and Kinetis processors, and can take advantage of the hardware cryptography offered by the CAU, and mmCAU.
Weekly updates
Archives
- November 2024 (26)
- October 2024 (18)
- September 2024 (21)
- August 2024 (24)
- July 2024 (27)
- June 2024 (22)
- May 2024 (28)
- April 2024 (29)
- March 2024 (21)
- February 2024 (18)
- January 2024 (21)
- December 2023 (20)
- November 2023 (20)
- October 2023 (23)
- September 2023 (17)
- August 2023 (25)
- July 2023 (39)
- June 2023 (13)
- May 2023 (11)
- April 2023 (6)
- March 2023 (23)
- February 2023 (7)
- January 2023 (7)
- December 2022 (15)
- November 2022 (11)
- October 2022 (8)
- September 2022 (7)
- August 2022 (12)
- July 2022 (7)
- June 2022 (14)
- May 2022 (10)
- April 2022 (11)
- March 2022 (12)
- February 2022 (22)
- January 2022 (12)
- December 2021 (13)
- November 2021 (27)
- October 2021 (11)
- September 2021 (14)
- August 2021 (10)
- July 2021 (16)
- June 2021 (13)
- May 2021 (9)
- April 2021 (13)
- March 2021 (24)
- February 2021 (22)
- January 2021 (18)
- December 2020 (19)
- November 2020 (11)
- October 2020 (3)
- September 2020 (20)
- August 2020 (11)
- July 2020 (7)
- June 2020 (14)
- May 2020 (13)
- April 2020 (14)
- March 2020 (4)
- February 2020 (21)
- January 2020 (18)
- December 2019 (7)
- November 2019 (16)
- October 2019 (14)
- September 2019 (18)
- August 2019 (16)
- July 2019 (8)
- June 2019 (9)
- May 2019 (28)
- April 2019 (27)
- March 2019 (15)
- February 2019 (10)
- January 2019 (16)
- December 2018 (24)
- November 2018 (9)
- October 2018 (15)
- September 2018 (15)
- August 2018 (5)
- July 2018 (15)
- June 2018 (29)
- May 2018 (12)
- April 2018 (6)
- March 2018 (18)
- February 2018 (6)
- January 2018 (11)
- December 2017 (5)
- November 2017 (12)
- October 2017 (5)
- September 2017 (7)
- August 2017 (6)
- July 2017 (11)
- June 2017 (7)
- May 2017 (9)
- April 2017 (5)
- March 2017 (6)
- January 2017 (8)
- December 2016 (2)
- November 2016 (1)
- October 2016 (15)
- September 2016 (6)
- August 2016 (5)
- July 2016 (4)
- June 2016 (9)
- May 2016 (4)
- April 2016 (4)
- March 2016 (4)
- February 2016 (9)
- January 2016 (6)
- December 2015 (4)
- November 2015 (6)
- October 2015 (5)
- September 2015 (5)
- August 2015 (8)
- July 2015 (7)
- June 2015 (9)
- May 2015 (1)
- April 2015 (4)
- March 2015 (12)
- January 2015 (4)
- December 2014 (6)
- November 2014 (3)
- October 2014 (1)
- September 2014 (11)
- August 2014 (5)
- July 2014 (9)
- June 2014 (10)
- May 2014 (5)
- April 2014 (9)
- February 2014 (3)
- January 2014 (5)
- December 2013 (7)
- November 2013 (4)
- October 2013 (7)
- September 2013 (3)
- August 2013 (9)
- July 2013 (7)
- June 2013 (4)
- May 2013 (7)
- April 2013 (4)
- March 2013 (2)
- February 2013 (3)
- January 2013 (8)
- December 2012 (12)
- November 2012 (5)
- October 2012 (7)
- September 2012 (3)
- August 2012 (6)
- July 2012 (4)
- June 2012 (3)
- May 2012 (4)
- April 2012 (6)
- March 2012 (2)
- February 2012 (5)
- January 2012 (7)
- December 2011 (5)
- November 2011 (7)
- October 2011 (5)
- September 2011 (6)
- August 2011 (5)
- July 2011 (2)
- June 2011 (7)
- May 2011 (11)
- April 2011 (4)
- March 2011 (12)
- February 2011 (7)
- January 2011 (11)
- December 2010 (17)
- November 2010 (12)
- October 2010 (11)
- September 2010 (9)
- August 2010 (20)
- July 2010 (12)
- June 2010 (7)
- May 2010 (1)
- January 2010 (2)
- November 2009 (2)
- October 2009 (1)
- September 2009 (1)
- May 2009 (1)
- February 2009 (1)
- January 2009 (1)
- December 2008 (1)