Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

mkm

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mkm

A common identity module

  • 2.2.0
  • PyPI
  • Socket score

Maintainers
1

Ming Ke Ming (名可名) -- Account Module (Python)

license Version PRs Welcome Platform

This document introduces a common Account Module for decentralized user identity authentication.

Copyright © 2018-2019 Albert Moky

0. Meta

The Meta was generated by your private key, it can be used to build a new ID for entity, or verify the ID/PK pair.

It consists of 4 fields:

FieldDescription
typeMeta Algorithm Version
keyPublic Key
seedEntity Name
fingerprintSignature to generate address

0.0. Meta Type

  • 0x01 Default version
  • 0x02 BTC version
  • 0x03 Extended BTC version
  • 0x04 ETH version
  • 0x05 Extended ETH version

0.1. Key

A public key (PK) was bound to an ID by the Meta Algorithm.

0.2. Seed

A string as same as ID.name for generate the fingerprint.

0.3. Fingerprint

THe fingerprint field was generated by your private key and seed:

data = seed.encode('utf-8')
fingerprint = private_key.sign(data)

1. ID

The ID is used to identify an entity(user/group). It consists of 3 fields and 2 extended properties:

FieldDescription
nameSame with meta.seed
addressUnique Identification
terminalLogin point, it's optional.
typeNetwork type

The ID format is name@address[/terminal].

1.0. ID Type

The network type of a person is 8, and group is 16:

class NetworkType(IntEnum):
    # Person Account
    MAIN = 0x08         # 0000 1000 (Person)

    # Virtual Groups
    GROUP = 0x10        # 0001 0000 (Multi-Persons)
    POLYLOGUE = 0x10    # 0001 0000 (Multi-Persons Chat, N < 100)
    CHATROOM = 0x30     # 0011 0000 (Multi-Persons Chat, N >= 100)

    # Network
    PROVIDER = 0x76     # 0111 0110 (Service Provider)
    STATION = 0x88      # 1000 1000 (Server Node)

    # Internet of Things
    THING = 0x80        # 1000 0000 (IoT)
    ROBOT = 0xC8        # 1100 1000

1.1. Name

The Name field is a username, or just a random string for group:

  1. The length of name must more than 1 byte, less than 32 bytes;
  2. It should be composed by a-z, A-Z, 0-9, or charactors '_', '-', '.';
  3. It cannot contain key charactors('@', '/').
# Name examples
user_name  = "Albert.Moky"
group_name = "Group-9527"

1.2. Address

The Address field was created with the Fingerprint in Meta and a Network ID:

def check_code(data: bytes) -> bytes:
    # check code in BTC address
    return sha256(sha256(data))[:4]

class BTCAddress(Address):

    @classmethod
    def new(cls, data: bytes, network: NetworkType=0) -> Address:
        """Generate address with fingerprint and network ID
        :param data:    fingerprint (signature/key.data)
        :param network: address type
        :return:        Address object
        """
        prefix = chr(network).encode('latin1')
        digest = ripemd160(sha256(data))
        code = check_code(prefix + digest)
        address = base58_encode(prefix + digest + code)
        return BTCAddress(address)

When you get a meta for the entity ID from the network, you must verify it with the consensus algorithm before accept its public key.

1.3. Terminal

A resource identifier as Login Point.

2. Samples

ID

# ID examples
ID1 = "hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj"  # Immortal Hulk
ID2 = "moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk"  # Monkey King

Meta

/* Meta(JsON) for hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj */
{
    "version"     : 0x01,
    "key"         : {
        "algorithm" : "RSA",
        "data"      : "-----BEGIN PUBLIC KEY-----\nMIGJAoGBALB+vbUK48UU9rjlgnohQowME+3JtTb2hLPqtatVOW364/EKFq0/PSdnZVE9V2Zq+pbX7dj3nCS4pWnYf40ELH8wuDm0Tc4jQ70v4LgAcdy3JGTnWUGiCsY+0Z8kNzRkm3FJid592FL7ryzfvIzB9bjg8U2JqlyCVAyUYEnKv4lDAgMBAAE=\n-----END PUBLIC KEY-----",
        // other parameters
        "mode"      : "ECB",
        "padding"   : "PKCS1",
        "digest"    : "SHA256"
    },
    "seed"        : "hulk",
    "fingerprint" : "jIPGWpWSbR/DQH6ol3t9DSFkYroVHQDvtbJErmFztMUP2DgRrRSNWuoKY5Y26qL38wfXJQXjYiWqNWKQmQe/gK8M8NkU7lRwm+2nh9wSBYV6Q4WXsCboKbnM0+HVn9Vdfp21hMMGrxTX1pBPRbi0567ZjNQC8ffdW2WvQSoec2I="
}

(All data encode with BASE64 algorithm as default, excepts the address)

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc