More on TeleMessage TM SGNL app: analysis shows it sends decrypted Signal chats to a public AWS server, contradicting E2E claims. Hack confirms plaintext access to Signal, Telegram, WhatsApp logs.
More on TeleMessage TM SGNL app: analysis shows it sends decrypted Signal chats to a public AWS server, contradicting E2E claims. Hack confirms plaintext access to Signal, Telegram, WhatsApp logs.
⚠️ App security alert: TM SGNL — a custom Signal fork used by high-level U.S. officials — was reportedly hacked 📱🔓
Key findings via researchers:
🛠️ Hardcoded credentials found in the app’s source code
📥 Hacker claims to have breached TeleMessage (creator of TM SGNL) in minutes
📁 Archive server may store unencrypted copies of sensitive messages
📇 Leaked data includes government contacts, messages, and backend access
🚨 Why it matters:
🔐 TM SGNL modifies Signal to support message archiving — possibly before encryption
⚠️ That’s a potential plaintext vulnerability — even if E2EE is in place
💬 Raises urgent questions about how U.S. officials handle sensitive digital comms
🛡️ Security leaders should:
📱 Vet third-party forks of secure messaging apps rigorously
🚫 Avoid using unofficial tools for sensitive communication
🧾 Align secure messaging practices with compliance and cybersecurity
This incident isn’t just a breach — it’s a wake-up call about assuming encryption = security.
#CyberSecurity #MessagingApps #Signal #DataBreach #GovernmentSecurity #ThreatIntel #security #privacy #cloud #infosec
WhatsApp is rolling out cloud-based AI features like message summarization and composition, powered by Private Processing to keep your chats secure and private. AI tools, privacy-first. #WhatsApp #AI #Privacy #DataSecurity #CloudAI #TechNews #EndToEndEncryption #MessagingApps
Want more privacy for your WhatsApp conversations? 🔒 A new built-in security feature lets you lock specific chats with biometrics or a secret code. Learn how to secure your private messages and keep them hidden from prying eyes 👀 Read our step-by-step guide to enhance your chat privacy.
#WhatsApp #Privacy #ChatSecurity #MessagingApps #MetaPlatforms
Keep your WhatsApp conversations private with new Chat Lock feature 🔒 Now you can secure specific chats using biometrics or a secret code for enhanced privacy 🔐 Read our step-by-step guide to learn how to protect your private conversations.
#WhatsApp #Privacy #ChatLock #MessagingApps #DigitalSecurity
Samsung quietly retires its Google Messages rival, and not everyone is happy about it. What's your take?
#SamsungNews #TechUpdates #MessagingApps https://zurl.co/NIwEp
Google Messages Activates AI Powered Nudity Blurring with On-Device Warnings
#GoogleMessages #Android #AI #ContentWarning #Privacy #SafetyCore #NudityDetection #MessagingApps #Mobile #Google #Alphabet #CyberSafety #OnDeviceAI #RCS
WhatsApp Unveils New Features for Chats, Calls, and Channels to Enhance User Experience
#chatfunctionality #messagingapps #newfeatures #socialmediaupdates #whatsapp
https://blazetrends.com/whatsapp-unveils-new-features-for-chats-calls-and-channels-to-enhance-user-experience/?fsp_sid=11369
WhatsApp Tests New Chat Privacy Features
or
WhatsApp Enhances Chat Security with Export Restrictions
#automatedmediasaving #chatexport #messagingapps #socialmediafeatures #whatsapp
https://blazetrends.com/whatsapp-tests-new-chat-privacy-featuresor-whatsapp-enhances-chat-security-with-export-restrictions/?fsp_sid=8879
A conversation with Prof. Alberto Segre, Chair of CS at University of Iowa.
This clip dives into encrypted messaging — how tools like WhatsApp protect your privacy (or don’t), and why understanding the tech matters more than ever.
We also talk AI, quantum computing, and internet history. It’s deep, but accessible.
🎧 Listen wherever you get your podcasts.
https://youtu.be/RqSkKahvlPA
#theinternetiscrack #podcast #Encryption #Cybersecurity #TechPodcast #InternetEthics #MessagingApps
Experts say Signal is as secure as messaging gets, but is it safe for national security? 🤔🔒 Read more about why it's not recommended for sensitive government communications: https://www.abc.net.au/news/2025-03-26/signal-safe-as-messaging-gets-but-not-for-national-security/105093006 #SignalSecurity #MessagingApps #NationalSecurity #newz
@Mer__edith @signalapp @purism @PINE64 @furilabs @postmarketOS @volla @ubports @mobian I understand that addition of linked desktop devices can be a security concern from Signal's point of view. However, please allow us the option (after registering/activating on Signal Android) to completely move to the #SignalDesktop and deactivate/deregister the mobile version altogether. You can even make this dependent on the mobile user granting permission.
Thank you for the great work you all are doing for #privacy and secure communication. Although we do not like the phone number requirement, we still consider Signal one of the best communication apps and have on-boarded countless numbers of users.
(2/2)
Yes, Signal is the messaging app of choice for government people who want to hide what they're doing. They know the other apps are insecure because they themselves can spy on people using them. And they won't use official secure channels because they want to avoid accountability
Automattic’s Beeper Unveils Redesigned Desktop and iOS Messaging Apps Post-Merger
#Automattic #Beeper #TextsCom #MessagingApps #TechNews #iOS
https://www.techi.com/automattic-beeper-redesigned-desktop-ios-apps-launch/
iPhone users, a game-changing WhatsApp update is in the works 📱 Meta is finally bringing multi-account support to iOS, catching up with Android. Want to know when this feature arrives and how it'll change your messaging experience? Read the full article ⬇️
#WhatsApp #iOS #iPhone #Meta #MessagingApps
https://true-tech.net/whatsapp-multi-account-support-iphone-spotted-beta/
Don’t Use Session (Signal Fork)
Last year, I outlined the specific requirements that an app needs to have in order for me to consider it a Signal competitor.
Afterwards, I had several people ask me what I think of a Signal fork called Session. My answer then is the same thing I’ll say today:
Don’t use Session.
The main reason I said to avoid Session, all those months ago, was simply due to their decision to remove forward secrecy (which is an important security property of cryptographic protocols they inherited for free when they forked libsignal).
Lack of forward secrecy puts you in the scope of Key Compromise Impersonation (KCI) attacks, which serious end-to-end encryption apps should prevent if they want to sit at the adults table. This is why I don’t recommend Tox.
And that observation alone should have been enough for anyone to run, screaming, in the other direction from Session. After all, removing important security properties from a cryptographic security protocol is exactly the sort of thing a malicious government would do (especially if the cover story for such a change involves the introduction of swarms and “onion routing”–which computer criminals might think sounds attractive due to their familiarity with the Tor network).
Unfortunately, some people love to dig their heels in about messaging apps. So let’s take a closer look at Session.
I did not disclose this blog post privately to the Session developers before pressing publish.
I do not feel that cryptographic issues always require coordinated disclosure with the software vendor. As Bruce Schneier argues, full disclosure of security vulnerabilities is a “damned good idea”.
I have separated this blog post into two sections: Security Issues and Gripes.
Security Issues
Insufficient Entropy in Ed25519 Keys
One of the departures of Session from Signal is the use of Ed25519 rather than X25519 for everything.
Ed25519 Keypairs generated from their KeyPairUtilities
object only have 128 bits of entropy, rather than the ~253 bits (after clamping) you’d expect from an Ed25519 seed.
fun generate(): KeyPairGenerationResult { val seed = sodium.randomBytesBuf(16) try { return generate(seed) } catch (exception: Exception) { return generate() }}fun generate(seed: ByteArray): KeyPairGenerationResult { val padding = ByteArray(16) { 0 } val ed25519KeyPair = sodium.cryptoSignSeedKeypair(seed + padding)
As an implementation detail, they encode a recovery key as a “mnemonic” (see also: a gripe about their mnemonic decoding).
Does This Matter?
You might think that clearing the highest 128 bits of the Ed25519 seed is fine for one of the following reasons:
It’s true that Ed25519 targets the 128-bit security level, if you’re focused on the security of the Elliptic Curve Discrete Logarithm Problem (ECDLP).
Achieving 128 bits of security in this model requires 256-bit secrets, since the best attack against the ECDLP finds a discrete logarithm in guesses.
Additionally, having 256-bit secrets makes the multi-user security of the scheme easy to reason about, whereas 128-bit secrets makes it a lot harder. (This mostly comes up in criticism of AES, which has a 128-bit block size.)
When your secret only has possible values, your multi-user security is no longer as secure as Ed25519 expects.
Additionally, you can shove the SHA512 + clamping in your attack script (thus negating the first objection) and find the corresponding secret key in queries if you know the top 128 bits were initialized to 0, using a modified version of Pollard’s rho for discrete logarithms.
This means that Session’s KeyPairUtilities
class only provides 64 bits of ECDLP security.
What does 64 bits of ECDLP Security actually mean?
I provided a technical definition already, but that’s probably not meaningful to most people outside computer security.
What this means is that a distributed computing effort can find the secret key for a given Ed25519 public key generated from this algorithm in only queries.
For flavor, queries is approximately the attack cost to find a SHA1 collision, which we know is possible and economical.
Based on this attack, the authors projected that a collision attack on SHA-1 may cost between US$75K and US$120K by renting GPU computing time on Amazon EC2 using spot-instances, which is significantly lower than Schneier’s 2012 estimates.
— from the Shattered paper, page 2.
I don’t know if this was mere stupidity or an intentional NOBUS backdoor that only well-resourced adversaries can crack. (I also don’t have hundreds of thousands of dollars lying around to test this myself.)
How would you exploit this in practice?
If you’re not familiar with Pollard’s rho, then this section might be a bit abstract and difficult to follow.
Instead of directly passing a full 256-bit value to your oracle with each iteration (like you do with a standard Pollard’s rho implementation), you would need mutate the output the same way Session does (n.b., replace 128 bits of the seed with zeroes), hash & clamp that, and then perform the scalar multiplication.
It should be a bit more expensive than a raw ECDLP attack against a 128-bit curve (due to the hashing), but the strategy should succeed in the expected number of queries (average case).
Although this makes the attack totally feasible for a nation state, I do not have the resources to build and test a proof of concept against a candidate keypair. If anyone does, get in touch, it would make for a fun research project.
CMYKatAlternatively, Pollard’s kangaroo might be a better cryptanalysis technique for Session’s setup.
Note: If there is any classified government algorithm especially suited for cracking Ed25519 keys constructed exactly like Session does, it’s not one I’ve ever heard of. I don’t have any security clearances, nor do I want one.
However, ECDLP security of elliptic curve-based protocols is extremely well-understood in the cryptography literature.
In-Band Negotiation for Message Signatures
If you thought the previous issue was mitigated by the use of Ed25519 signatures on each message, don’t worry, the Session developers screwed this up too!
// 2. ) Get the message partsval signature = plaintextWithMetadata.sliceArray(plaintextWithMetadata.size - signatureSize until plaintextWithMetadata.size)val senderED25519PublicKey = plaintextWithMetadata.sliceArray(plaintextWithMetadata.size - (signatureSize + ed25519PublicKeySize) until plaintextWithMetadata.size - signatureSize)val plaintext = plaintextWithMetadata.sliceArray(0 until plaintextWithMetadata.size - (signatureSize + ed25519PublicKeySize))// 3. ) Verify the signatureval verificationData = (plaintext + senderED25519PublicKey + recipientX25519PublicKey)try { val isValid = sodium.cryptoSignVerifyDetached(signature, verificationData, verificationData.size, senderED25519PublicKey) if (!isValid) { throw Error.InvalidSignature }} catch (exception: Exception) { Log.d("Loki", "Couldn't verify message signature due to error: $exception.") throw Error.InvalidSignature}
What this code is doing (after decryption):
Congratulations, Session, you successfully reduced the utility of Ed25519 to that of a CRC32!
Art: AJUsing Public Keys As AES-GCM Keys
I wasn’t entirely sure whether this belongs in the “gripes” section or not, because it’s so blatantly stupid that there’s basically no way Quarkslab would miss it if it mattered.
When encrypting payloads for onion routing, it uses the X25519 public key… as a symmetric key, for AES-GCM. See, encryptPayloadForDestination()
.
val result = AESGCM.encrypt(plaintext, x25519PublicKey)deferred.resolve(result)
Session also does this inside of encryptHop()
.
val plaintext = encode(previousEncryptionResult.ciphertext, payload)val result = AESGCM.encrypt(plaintext, x25519PublicKey)
In case you thought, maybe, that this is just a poorly named HPKE wrapper… nope!
/** * Sync. Don't call from the main thread. */internal fun encrypt(plaintext: ByteArray, symmetricKey: ByteArray): ByteArray { val iv = Util.getSecretBytes(ivSize) synchronized(CIPHER_LOCK) { val cipher = Cipher.getInstance("AES/GCM/NoPadding") cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(symmetricKey, "AES"), GCMParameterSpec(gcmTagSize, iv)) return ByteUtil.combine(iv, cipher.doFinal(plaintext)) }}
This obviously doesn’t encrypt it such that only the recipient (that owns the secret key corresponding to the public key) can decrypt the message. It makes it to where anyone that knows the public key can decrypt it.
I wonder if this impacts their onion routing assumptions?
Why should I trust session?
(…)
When using Session, your messages are sent to their destinations through a decentralised onion routing network similar to Tor (with a few key differences) (…)
Gripes
Some of these aren’t really security issues, but are things I found annoying as a security engineer that specializes in applied cryptography.
Mnemonic Decoding Isn’t Constant-Time
The way mnemonics are decoded involves the modulo operator, which implicitly uses integer division (which neither Java nor Kotlin nor Swift implement in constant-time).
return wordIndexes.windowed(3, 3) { (w1, w2, w3) -> val x = w1 + n * ((n - w1 + w2) % n) + n * n * ((n - w2 + w3) % n) if (x % n != w1.toLong()) throw DecodingError.Generic val string = "0000000" + x.toString(16) swap(string.substring(string.length - 8 until string.length))}.joinToString(separator = "") { it }
This isn’t a real security problem, but I did find it annoying to see in an app evangelized as “better than Signal” on privacy forums.
Unsafe Use of SecureRandom on Android
The recommended way to get secure random numbers on Android (or any Java or Kotlin software, really) is simply new SecureRandom()
. If you’re running a service in a high-demand environment, you can take extra care to make a thread-local instance of SecureRandom. But a local RNG for a single user isn’t that.
What does Session do? They use SHA1PRNG, of course.
public static byte[] getSecretBytes(int size) { try { byte[] secret = new byte[size]; SecureRandom.getInstance("SHA1PRNG").nextBytes(secret); return secret; } catch (NoSuchAlgorithmException e) { throw new AssertionError(e); }}
And again here.
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
Why would anyone care about this?
On modern Android devices, this isn’t a major concern, but the use of SHA1PRNG used to be a source of vulnerabilities in Android apps. (See also: this slide deck.)
Closing Thoughts
There are a lot of Session’s design decisions that are poorly specified in their Whitepaper and I didn’t look at. For example, how group messaging keys are managed.
When I did try to skim that part of the code, I did find a component where you can coerce Android clients into running a moderately expensive Argon2 KDF by simply deleting the nonce
from the message.
val isArgon2Based = (intermediate["nonce"] == null)if (isArgon2Based) { // Handle old Argon2-based encryption used before HF16
That’s hilarious.
Cryptography nerds should NOT be finding the software that activists trust with their privacy hilarious.
CMYKatSo if you were wondering what my opinion on Session is, now you know: Don’t use Session. Don’t let your friends use Session.
If you’re curious about the cryptography used by other messaging apps, please refer to this page that collects my blogs about this topic.
#AESGCM #Android #asymmetricCryptography #cryptography #E2EE #Ed25519 #Java #Kotlin #messagingApps #OnlinePrivacy #privateMessaging #Session #Signal #SignalAlternatives #vuln
Telegram reaches profitability with $1 billion revenue and 12 million premium users: Messaging platform achieves first-time profitability in 2024, triples premium subscribers, and maintains $500M cash reserves https://ppc.land/telegram-reaches-profitability-with-1-billion-revenue-and-12-million-premium-users/?utm_source=dlvr.it&utm_medium=mastodon #Telegram #Profitability #MessagingApps #PremiumUsers #TechNews
Does anyone have experience with Sekreto https://f-droid.org/en/packages/com.example.sekreto/? It’s a new encrypted messaging app, and the user interface is in Esperanto or Russian. It seems similar to Threema and has a GitHub page: https://gitlab.com/fdroid/fdroiddata/-/merge_requests. However, I can’t find any descriptions in Esperanto, so I assume that Russian is the main developer language, but that’s just a guess. I hope the community here knows more about it!
#PrivacyApps #OpenSource #XMPP #Threema #DigitalPrivacy #SecureMessaging #FOSS #RussianTech #TechCommunity #AppReview #PrivacyMatters #CyberSecurity #MessagingApps