Subject: Re: Question about areas

From: Sergey Matveev <[email-masked]>
Date: Thu, 25 Sep 2025 18:16:36 +0300

Greetings!

*** Hadmut Danisch [2025-09-24 19:55]:
>So my question is: Why does A require posession of the secret keys? What
>does it need them for, if forwarding is possible without keys?

"A" must not require it, you are right. I really do not remember why
that check was left in Tx() function. Seems that it was initially added
and forgotten to be removed.

Thanks for noticing that!

I hope I will find time to make a release on that weekend and try to
make an updated port for FreeBSD, where net/nncp is pretty outdated. But
that patch (pushed to "develop" branch) will stop requiring you to have
area's private key for sending:

diff --git src/tx.go src/tx.go
index e0f4f08..2504135 100644
--- src/tx.go
+++ src/tx.go
@@ -59,9 +59,6 @@ func (ctx *Ctx) Tx(
 	var area *Area
 	if areaId != nil {
 		area = ctx.AreaId2Area[*areaId]
-		if area.Prv == nil {
-			return nil, 0, "", errors.New("area has no encryption keys")
-		}
 	}
 	hops := make([]*Node, 0, 1+len(node.Via))
 	hops = append(hops, node)

>I do consider it as insecure, if node A, which is solely a sender to the
>area and not a member, needs to have the secret keys. E.g. on an email relay
>in a cloud, an attacker who get's access to the machine, can immediately
>decrypt all messages in the spool directory.

I would not consider any cloud computer as safe at all. It is not under
your control, so if one creates any packets, then any cloud provider can
see the generated/passed plaintext, that definitely existed in
pipes/memory/tmpfiles before the encryption.

-- 
Sergey Matveev (http://www.stargrave.org/)
LibrePGP: 12AD 3268 9C66 0D42 6967  FD75 CB82 0563 2107 AD8A