Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new username & avatar spec #42

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Conversation

iurimatias
Copy link
Member

No description provided.

@iurimatias iurimatias marked this pull request as draft December 6, 2021 19:18
- A user MUST be able to set a local username for a profile
- A local username MUST be visible only to the user who set it
- If profile has a local set username set then it MUST show the original user name (e.g if the local username is 'intimitating guy' and the original username is 'Jotaro' then `intimiating guy (Jotaro)`)
- If a profile has a registered ENS username, then it MUST end in .eth
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how does this work with stateofus domains vs ens domains?

Copy link

@John-44 John-44 Dec 7, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@iurimatias stateofus domains are displayed as [ENS name].stateofus.eth

ENS domains from elsewhere should be displayed as [ENS name].eth


## Functional Requirements

**Profile Emblems:**
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is the 'default' state, for a new profile, is it just no emblems?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link

@John-44 John-44 Dec 7, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All possible username permutations should be enumerated in the Figma file here

2021-12-07 09_42_45-Window


**Profile avatar**

- If a profile does not have a profile photo set it MUST use a 2 letter avatar
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what determines those 2 letters?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@iurimatias the user - those two letters are always the first two letters of the username the user enters

@iurimatias
Copy link
Member Author

iurimatias commented Dec 6, 2021

@John-44 when should profiles show the public key? in the design sometimes they show sometimes not, but it's unclear why

----- reply -----

The designs are supposed to show the public key being displayed for all users who don't have ENS usernames.

Also the designs are supposed to show the identicon ring being displayed around the avatar for all users who don't have ENS usernames.

e.g. if a user's identicon ring is being displayed, the user's chat public key fragment should also be displayed, and visa versa

If you can see any inconsistencies in this figma https://www.figma.com/file/IPpvkpDWabBKJTeo6bFop0/Kuba%E2%8E%9CDesktop?node-id=1837%3A335126 please ping me a screenshot of the inconsistency so we can fix the inconsistencies in the design. We've scrubbed the design a few times to try to make sure it's fully consistent in this respect.


**Profile Emblems:**

- If a profile is a mutual contact then it MUST display a mutual contact emblem (e.g a profile icon) and it MUST NOT display other emblems.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is slightly incorrect, a mutual contact can also display the untrustworthy emblem. This is the only scenario where a contact can display two emblems


## Motivation

Users need a mechanism to identity themselves to other users that is easy to use and at the same time somewhat resistant to impersonation attacks. At the time of writing Status uses deterministic 3 word usernames and ENS usernames. Unfortunatly 3 word usernames have shown to be quite confusing for new users as they are used to set their own usernames in any chat app.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More background context on the problems these design changes are aiming to solve is documented here https://docs.google.com/document/d/1d5zdPR2_Jn2EZmKNQVNsc7sUoLk4DXPN7Gch3CnYkaE/edit

@iurimatias iurimatias marked this pull request as ready for review December 7, 2021 16:26
@@ -0,0 +1,132 @@
---
title: "username & profile spec"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should use upper case letter as well

Suggested change
title: "username & profile spec"
title: "Username & profile spec"

## Motivation

Users need a mechanism to identity themselves to other users that is easy to use and at the same time somewhat resistant to impersonation attacks. At the time of writing Status uses deterministic 3 word usernames and ENS usernames. Unfortunately 3 word usernames have shown to be quite confusing for new users as they are used to set their own usernames in any chat app.
Here we introduce support for users to set their own display name and introduce at least 3 mechaniscs to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile, the second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier, the third mechanism involves preventing duplicate displaynames from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verifcation Spec.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Here we introduce support for users to set their own display name and introduce at least 3 mechaniscs to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile, the second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier, the third mechanism involves preventing duplicate displaynames from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verifcation Spec.
Here we introduce support for users to set their own display name and introduce at least 3 mechanics to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile. The second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier. The third mechanism involves preventing duplicate display names from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verification Spec.

Generally, is this spec purely about user names within communities or globally? Because only the third mechanism mentions communities explicitly. We should set this expectation straight from the beginning.

Also shouldn't the identity verification spec be linked here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sequence of colors around the profile to
sequence of colors around the profile image to

Another thing, should we also say that we display the start and end of the pubkey next to their name?


- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint)
- display name - A username choosen by the user to be displayed in the chat.
- local username - An alias for a profile choosen by the User. Only visible to the user.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- local username - An alias for a profile choosen by the User. Only visible to the user.
- local username - An alias for a profile (other users or contacts) chosen by the User. Only visible to the user.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the nickname? IMO, we should refer to it as a nickname if that is the case, since it is way easier to follow.

- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint)
- display name - A username choosen by the user to be displayed in the chat.
- local username - An alias for a profile choosen by the User. Only visible to the user.
- verified identity - A profile that went through the Identity Verification process. See Identity Verification Spec.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs link to spec


### Setting up a profile

prequesites: User is on onboarding process or has already set up a profile and has choosen to rename their username.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
prequesites: User is on onboarding process or has already set up a profile and has choosen to rename their username.
Prerequisites: User is in onboarding process or has already set up a profile and has chosen to rename her username.

6. User fills in a new display name
7. Systems adds user to the community
7.1 alternative: System warns user that the display name is already taken in one of the communities the user is part of
7.2 alternative: System warns user that the display name is invalid
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this point, it's still unclear to me whether the username is only available within communities... What if I'm part of a community that has a user "Alfred" and I also have a contact that happens to have the same username "Alfred"?

Both have never seen a warning because they aren't in the same community, but still I have multiple contacts with the same username.

What if Alfred 1 then tries to join that community and changes his name due to conflict: Do I get notified about that?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another point, it's impossible to guarantee that we'll always have access to the current name of each member of the communities that we join, so it might be necessary to say that same name scenarios are possible.
See discussion here for more details: https://discord.com/channels/624205794384281629/697843216048717905/943494925645918239

- Display names MUST be at least 5 characters long
- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens
- Display names MUST NOT be longer than 24 characters
- Display names MUST NOT be "3 word names"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is redundant, given the 3rd requirement in this list

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@PascalPrecht as Richard pointed out, spaces are accepted, so this requirement is so people don't impersonate an old 3 word name.

- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens
- Display names MUST NOT be longer than 24 characters
- Display names MUST NOT be "3 word names"
- Display names MUST NOT end in "_eth" or ".eth" or "-eth"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this the case though? To prevent impersonation/confusion?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@PascalPrecht it's to avoid people impersonating by faking an ENS name, since ENS names are supposed to be unique

- Display names MUST NOT be longer than 24 characters
- Display names MUST NOT be "3 word names"
- Display names MUST NOT end in "_eth" or ".eth" or "-eth"
- Profiles containing 3 word names as their display name that does not deterministically correspond to their chatkey MUST display a warning icon to indicate that the username is not deterministic
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The rules above already state it that a display name must be composed of alpha numeric characters, underscores and/or hyphens. It won't be possible for users to set a 3 word name then

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Designs seem to allow spaces in usernames. So maybe it will be possible

**Profile avatar**

- If a profile does not have a profile photo set it MUST use a 2 letter avatar
- A 2 letter avatar MUST be the first two letters of the display name
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If no display name is set, then we stick to identicons?

- verified identity - A profile that went through the Identity Verification process. See Identity Verification Spec.
- profile emblem - an icon next to a profile that is used to qualify that profile.
- emoji hash - A deterministic sequence of emojis that uniquely identifies a profile.
- identicon ring - A deterministic sequence of colors around a profile avar that is used to differentiate it from other profiles.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should there be an ability to set an nft as profile icon? (I know this is possible in mobile)

- A identicon ring MUST be composed of 5 color segments
- A identicon ring segment MAY be one of 32 distinctive colors
- A identicon ring segment MAY be of different length
- A identicon ring segments total length MUST BE exactly 25px
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

25 units not pixels

- Users MUST be able to set a profile photo for their profile
- Profile photos MUST be visible to all users

- A identicon ring MUST be composed of 5 color segments

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@iurimatias Is this specification due to some technical restriction? Since I understood from figma examples, a ring can have more than 5 colors.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@osmaczko calculated that 10 segments seems to be the optimal number


- A identicon ring MUST be composed of 5 color segments
- A identicon ring segment MAY be one of 32 distinctive colors
- A identicon ring segment MAY be of different length
Copy link

@noeliaSD noeliaSD Feb 15, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: It might be more clarifying if we add the word units to refer to the length of the segment and as understood from figma, this units length should be from 1 to 5 so, it could be interesting to mention it here, as well. Something like this: A identicon ring segment MAY be of different units length, from 1 to 5 units

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are going to encode 10 bytes of data into identicon ring, which implies: 49 units, 10 segments, 32 colors. A segment can be <1,40> units long (see calculations here: status-im/specs#166)


- Users MUST be able to set a display name for their own profile
- Display names MUST be at least 5 characters long
- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to the designs, the display names must allow spaces. Perhaps this could be changed to

Suggested change
- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens
- Display names MUST be composed of alphanumeric characters, underscores, spaces and/or hyphens, but they cannot contain spaces at the beggining or end

7.1 alternative: System warns user that the display name is already taken in one of the communities the user is part of
7.2 alternative: System warns user that the display name is invalid

## Functional Requirements
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The specs does not indicate what should happen when an user receives a message from an account that does not have a display name, which could happen when the author of a message has not updated their mobile or desktop app.
What should be displayed then? the three word alias?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it's a good idea to mention that existing users that update the app to a new version that supports this spec must undergo a process to set their display name before being able to chat

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree on both points. For backwards compatibility, I'd say it would make sense to display the 3 word name

## Motivation

Users need a mechanism to identity themselves to other users that is easy to use and at the same time somewhat resistant to impersonation attacks. At the time of writing Status uses deterministic 3 word usernames and ENS usernames. Unfortunately 3 word usernames have shown to be quite confusing for new users as they are used to set their own usernames in any chat app.
Here we introduce support for users to set their own display name and introduce at least 3 mechaniscs to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile, the second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier, the third mechanism involves preventing duplicate displaynames from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verifcation Spec.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sequence of colors around the profile to
sequence of colors around the profile image to

Another thing, should we also say that we display the start and end of the pubkey next to their name?


## Definitions

- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After evaluation, we determined that those 3 word are not unique, rather, they cover about 3 bytes of the pubkey, therefore leaving a lot of margin for conflicts.


- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint)
- display name - A username choosen by the user to be displayed in the chat.
- local username - An alias for a profile choosen by the User. Only visible to the user.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the nickname? IMO, we should refer to it as a nickname if that is the case, since it is way easier to follow.

- local username - An alias for a profile choosen by the User. Only visible to the user.
- verified identity - A profile that went through the Identity Verification process. See Identity Verification Spec.
- profile emblem - an icon next to a profile that is used to qualify that profile.
- emoji hash - A deterministic sequence of emojis that uniquely identifies a profile.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, almost impossible to be unique

6. User fills in a new display name
7. Systems adds user to the community
7.1 alternative: System warns user that the display name is already taken in one of the communities the user is part of
7.2 alternative: System warns user that the display name is invalid
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another point, it's impossible to guarantee that we'll always have access to the current name of each member of the communities that we join, so it might be necessary to say that same name scenarios are possible.
See discussion here for more details: https://discord.com/channels/624205794384281629/697843216048717905/943494925645918239

- A identicon ring segment MAY be one of 32 distinctive colors
- A identicon ring segment MAY be of different length
- A identicon ring segments total length MUST BE exactly 25px
- unless a profile is a mutual contact, it MUST show the identicon ring around the profile avatar
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So when you are mutual contact, we don't show the ring? Wouldn't that become visually annoying to have some with and some without?


**EmojiHash**

- An Emoji Hash MUST be a sequence of 12 emojis determined by the profile's chat key
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's most likely gonna be 16, since 12 is not enough to cover enough bytes


- An Emoji Hash MUST be a sequence of 12 emojis determined by the profile's chat key
- A profile detailed view MUST show that profiles emoji hash

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be worth mentioning the number of emojis that we support. Say that we only support UTF(?) emojis, to be able to copy them, and not the flags, religious symbols, etc.


**Usernames in Communities**

- A community MUST NOT allow duplicate display names
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, this seems impossible with the current peer to peer architecture we have. Maybe saying "MUST prevent duplicate display names" would be more fitting


## Notes

- This spec implies that identicons & 3 word usernames features are to be removed from the app.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth to add that they should be still supported for backwards compatibility (showing the 3 word names for people still on an old version)

@osmaczko
Copy link

When status-im/specs#166 is accepted and merged, numbers related to emojis and identicon ring should be updated.

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.

8 participants