Skip to content

feat: refuse look-alike names, mark verified senders, and record them in the log - #114

Merged
m1ngsama merged 2 commits into
mainfrom
feat/anti-impersonation
Oct 14, 2026
Merged

m1ngsama merged 2 commits into
mainfrom
feat/anti-impersonation

Conversation

@m1ngsama

Copy link
Copy Markdown
Owner

Needs your call:

  • Message log v3 cannot be read by TNT 1.6 or older. Rolling back means restoring messages.log.v2.bak and losing messages written since (tnt-message-log.5).

A reserved handle could still be imitated with look-alike characters, terminal users had no way to tell a signed-in member from a stranger, and past messages could only guess who was verified.

  • Reserved names match by skeleton: separators and zero-width characters are dropped, fullwidth, Cyrillic and Greek look-alikes fold to Latin, and 0/o, 1/l/i, rn/m, vv/w count as the same. m1ngsama ID uses the same rules. This covers the nickname prompt, :nick, exec post, module senders and ssh HANDLE@host.
  • identity.reserve now renames any unverified session using the handle or a look-alike, like identity.verified did.
  • Verified senders get a ✓ after their name in the chat view, :users, :last and :search. Nicknames may not contain check marks.
  • Message log v3 adds a flags field; v marks a verified sender. v1 and v2 logs migrate in place at start, with a backup, and old records stay unverified. Exec tail and dump output is unchanged.
  • Version 1.7.0. make test passes.

… in the log

A reserved handle now also reserves every name that looks like it:
identity_skeleton() folds invisible characters, separators, fullwidth
forms, common Cyrillic, Greek and Latin look-alikes, case, 0 1 i | and
rn, vv the same way m1ngsama ID does, and the nickname prompt, :nick,
exec post, module senders and the SSH none-auth check compare skeletons.
identity.reserve now renames unverified look-alike holders the way
identity.verified already did, through the same function.

Messages from verified senders show a check mark after the name in the
chat view, :last and :search, and :users marks signed-in sessions. No
nickname may contain a check mark.

messages.log moves to v3: each record gains a flags field, v for a
verified sender. v1 and v2 logs are migrated in place at start with a
backup. Exec tail and dump output is unchanged.
@m1ngsama
m1ngsama merged commit fe7c583 into main Oct 14, 2026
2 of 3 checks passed
@m1ngsama
m1ngsama deleted the feat/anti-impersonation branch October 14, 2026 13:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant