]> WPIA git - gigi.git/blobdiff - doc/specification.md
fix: Somewhat sensibly split the wishlist document
[gigi.git] / doc / specification.md
diff --git a/doc/specification.md b/doc/specification.md
new file mode 100644 (file)
index 0000000..d6713ab
--- /dev/null
@@ -0,0 +1,459 @@
+= THIS DOCUMENT IS STILL WORK IN PROGRESS =
+
+= Todo list =
+== "Todo" (work in active code) ==
+
+* Benchmarking (long time + load)
+
+* review all date/time uses in order to watch over the timezone.
+
+== Missing ==
+
+* add email/domain ping
+  * check for domains allowed in policy
+  * black list for special domains not be use by user but through org
+admins (e.g. adobe.com, 3m.com)
+    * Maybe use Alexa Top 1M as one source
+    * Use copies of DNS zones to identify new domains
+    * Use DNSRBLs to identify young domains
+  * List of well-known top level domains and Second-level sub domains
+(cf. Public Suffix List below in references)
+* OpenPGP integration
+* think about org - certificates
+* think about names. What are names? how many names? verify names?
+
+== Makeup ==
+
+** Extract menu from template
+* Separate content and design
+
+
+= Software requirements / wishes =
+== Generic ==
+* Useable without Javascript enabled
+* Features implemented in Javascript may only enhance features already
+accessible without Javascript
+* All pages presented to the user must be HTML5-compliant
+* All stylesheets must be valid CSS3
+* All used scripts should be JavaScript/ECMAScript 1.6 or compatible
+* For security reasons enforced by HSTS/CSP, the following restrictions
+for included content apply
+  * No inline Javascript
+  * No inline CSS
+  * Stylesheets, images, scripts are only allowed from a special
+"static" subdomain
+
+== Notifications ==
+* Mail notifications from the system should use OpenPGP or S/MIME signatures
+
+== Registration ==
+ * set names (tbd)
+ * set DoB (default: not set) (has to be before current date - not older
+than 150 years, check for 29.2.?) (if underage: special ack?) INO: Why
+not 120 year, which should be sufficent? (People are getting older, not
+younger ... You know?)
+ * set email(s) - at least one has to be set, primary needs to be set (tbd)
+ * selection of allowed login methods (default: yes for PW and cert)
+  * if PW login is allowed: set PW (tbd)  (always initially required as
+it is hard to issue certificates directly on signup?) ES: If you could
+do the email-check in the same session that is not mandatory. Even IF it
+is, this could be done with a 1-time-PW from the mail. - Maybe the
+complete step could be moved to AFTER the first email-check. It would
+make more sense, and one could add more explanation and a link to
+generate said certificate or whatever
+  * selection if pw-recovery per questions should be possible
+(explanatory text!)
+   * if yes: pw-recovery q&a have to be set
+ * confirmation that data was entered truthfully and recap of RLO at
+this stage
+ * Policy acceptance
+
+== Login/authentication ==
+* Separate Session scope for "www", "secure" and "api"
+* Authenticate with email and password ("www" only)
+* Authenticate with client certificate ("secure" + "api")
+* Authenticate (temporary) with one-time access token (special
+operations like revocation) (new feature)
+* Option to switch off/on authentication methods (new feature)
+* Option to selectively grant permissions to certain types of
+credentials only (e.g. pw login may only verify someone, while cert XY
+may do anything, SE interface with cert only) (new feature) ES: I think
+Benny was speaking about a user setting, while INO was speaking about a
+fixed global setting - this are two different things!
+* Reset password by security questions and mail (?? probably not
+[recommended in all situations])
+* Option to switch off/on pw recovery per security questions (new feature)
+* Reset password by verification
+* Policy acceptance at login, if current version of Policies was not accepted by
+user before
+
+=== Account Flags (tbd: collect further (new) flags) ===
+most should contain dates when set/removed - needed for account log and
+audit
+* Activated (Initial Account Activation Mail received)
+* Agent Test passed (FD: virtual = live calculation)
+* Agent (FD: virtual = live calculation)
+* blocked Agent
+* Policies accepted (virtual)
+* blocked account
+* deleted account
+* PW login allowed (Global for Account)
+* Cert login allowed (Global for Account, per Cert flags may set actual
+permissions)
+* PW Recovery function disabled
+* PW Reset Required
+* code signing allowed (Maybe better suited as a Permission for audit of
+Dates)
+* official nick name allowed (maybe needed for another new feature)
+* nick name allowed (maybe needed for another new feature)
+* announcements (general, country, regional, 200km) set
+* involved in arbitration case (probably virtual, as additional
+information has to be stored for those entries)
+
+=== Special Account Permissions and Groups ===
+TBL: Group [ID{AI/PK}, Name{S}]
+TBL: GroupMembership [ID{AI/PK}, User{Ref(User)}, Group{Ref(Group)}]
+TBL: Permission [ID{AI/PK}, Name{S}, ReportTo{S}]
+TBL: UserPermissions [ID{AI/PK}, User{Ref(User)},
+Permission{Ref(Permission)}, Action{E(Grant,Revoke)}, Date{Date}]
+TBL: GroupPermissions [ID{AI/PK}, Group{Ref(Group)},
+Permission{Ref(Permission)}, Action{E(Grant,Revoke)}, Date{Date}]
+
+* Used for special permissions e.g. in support interface, mass mailings
+* Additionally groups members with additional obligations (e.g. PP-Test)
+
+* manual setting of permissions has to appear in personal and admin-log
+
+== personal details (names, DoB) ==
+* Change personal details (names, DoB) (only if not verified)
+ * after each change, the user has to state, to have those names entered
+in official documents
+* maybe adding/removing of non-official nick-name allowed at any time
+(new feature)
+* Allow multiple names that can be verified independently (new) -
+something like this should be clarified with the VO at least, better to
+get it fixed clearly in an updated VPol (in general VPol does allow for this
+at the moment, but people do not know about this)
+* Allow to enter
+ * 1 name - with a confirmation that one only has exactly one name part
+ * Title? FN+ LN+ Suffix? marked as non-verifiable Nick? (could be used
+for internal processes) - with a confirmation that those are covered by
+at least one official document owned by the member/potential member
+* GUI should (until further notice) allow only exactly ONE name (with
+multiple name-parts) to be entered for an account
+* Names containing a Nickname component MUST NOT be primary names for an
+account (BB: Who did the striking? and Why?)
+* official nicknames may be used, if switched on based on an verification
+by support
+* else nicknames may only be displayed as an addition and MAY NOT be verified
+TBL: Name: [ID{AI/PK}, UID{Ref(User}},
+TBL: NameComponent [ID{AI/PK}, Name{Ref(Name)}, Order{I},
+Type{E[One,Firstname,Lastname,Title,Suffix,Nick,OfficialNick]},
+Verifiable{B}, Value{S}, Context{S}, Points{I,Cached}]
+
+
+=== Domain/email pinging ===
+* re-ping domains regularly
+  * Domains by automated variants like (see MoPad devDomainPing)
+    * text files at certain locations
+    * DNS TXT records
+    * opening ssl connections
+
+* configure types of pinging
+* show previous pings with results. -> for support all, for member only
+during their ownership (new feature)
+* show status of the various pings and next scheduled events (new feature)
+* Domain Pings record account ownership at time of ping (new feature)
+* domain dispute (transfer of domains)
+  * New owner files "Domain Dispute"
+  * Old Owner receives mail with options to Accept, Decline or report
+(to support) this claim
+  * If Accepted domain is transferred (and existing certificates
+referencing this domain revoked) [New feature: Old owner may specify
+which ones, confirmed by new owner]
+  * If any certificates should be kept, new owner is asked to confirm
+(within certain amount of time) INO: There should be NO handover of cert
+when moving domains (Needs discussion, new feature, maybe Policy Change
+required)
+  * Only after all certificates have either been revoked or been
+confirmed by the new owner, the domain is finally transferred over.
+  * If the transfer is Declined, no transfer is performed.
+  * If the transfer is reported, information on both parties is sent to
+support, including a description of the case (entered by the old owner
+when reporting)
+* email ping
+  * For emails on a domain within the account
+    * Reachability of the mail accounts is tried within random intervals
+(silent)
+    * If an email by our system is sent and properly accepted by the
+receiving system, next try for explicit ping is postponed. (maximum
+postponing of explicit check for about 1 year using this method) ES: has
+big issues with a) grace period as it removes a big part of security
+that we want to provide and b) automated contend-less mails as we
+declare to not address members without reason - a ping would not be
+considered a reason by our members BB: Outside the grace period the
+email is considered unconfirmed, and no explicit ping is triggered, but
+an active operation using this email address will cause a ping mail to
+be sent. The main reason for this is to reduce the number of ping mails
+sent when multiple certificates are issued in a given time span (UNDER
+HEAVY DISCUSSION)
+    * If any email address is failing for a certain time, schedule it to
+be explicitly checked by a ping mail on next use in a certificate
+    * a member should be able to initiate a ping mail
+    * support should be able to initiate a ping (admin-log!)
+    * If this explicit ping mail (with its included token/link) is not
+confirmed in a reasonable time, a revalidation of the accompanying
+domain is triggered, including a note to explicitly revalidate the
+failing address)
+    * permanent failing pings should be reported to primary email
+address once
+    * permanent failing pings should be displayed after a login (as
+recent notifications)
+  * For separate mail accounts (outside of domains that are part of an
+account):
+    * If regular mails from the system are properly received, postpone
+automatic checking by at most one year (see ES's and BB's comments above)
+  * send information/ping email before each certificate creation to
+affected email(s),
+    * this mail may be repeated if unsuccessful, but
+    * HAS TO be successful eventually to complete the issuing of the
+certificate for the affected email
+    * selection per general setting if such mails must be confirmed
+before the completion of the certificate issuing
+    * failures have to be displayed directly and in logs
+    * permanent failures have to be reported to primary email address once
+    * permanent failures should be displayed after a login (as recent
+notifications)
+  * option to inform primary email, also (general setting + selectable
+at certificate issue time)
+
+== Certificate Management ==
+* List all issued certificates per kind
+* Revoke issued certificates
+* renew certificates (re-issue a previous CSR) INO: what is if the old
+CSR does not meet the requiremnts any more eg. weak keys -> Prefill of
+the CreateCert-Dialog with the existing data for the cert/csr
+* select md (sha2-512, sha2-384, sha2-256, sha3-512, whirlpool?, ...)
+* select duration up to maximum allowed for member
+* select (verified) name components / acronyms thereof
+* select (ping-approved) domains / email-addresses
+* select class (up to what is allowed for member)
+* select if allowed for login as described above @ login
+* change comment of certificate
+
+MAYBE: * schedule to issue certificates for a day in the next two weeks.
+(Should require someone who knows what he's doing, requires experienced
+agent)
+
+Notification Mail about new certificate may include link for revocation
+(new feature)
+
+Process for issuing a certificate:
+1. Upload CSR / Generate key in Browser
+   (That's actually step 2)1a.for browser generation: selection for
+names, emails, domains, certificate root
+2. Confirm values and if necessary modify them
+3. Select additional settings (login, comments, ...) and validity interval
+4. confirm policies + confirm the issuing of the certificate as shown
+(do 1a to 4 in one form? - Could be done with JS enabled)
+5. send information (ping) mail to affected address (& primary if
+selected), display failures + potential abort
+6. Show Progress Page with JS hinting when it is done / otherwise using
+redirects in HTML
+7. Display a page with the final Certificate and details about it.
+
+Process of re-issuing certificate:
+1. click certificate (this creates the form-process)
+2. review all previous-entered settings. (inputs will be re-checked when
+sent: is name still valid/etc. still have all rights.)
+3. rest as above, formulations adapted to re-issuing
+
+=== Certificate types ===
+* Email certificates (include email (+ real name if points>=50)
+(+codesigning if enabled && Agent)
+* Domain certificates (include domain name + SANs (+real name if
+points>=50))
+* Organisation Email certificates
+* Organisation Domain certificates
+* Split more templates (e.g. Email from Code Signing)
+
+=== Verification management ===
+* Verify a member
+  * enter email address + DoB
+    * if correct:
+      * if member was verified before by this agent:
+        * most recent verification overrides previous ones
+      * if there was no previous verification by the agent over the member:
+        * names shown [has to be defined in more detail]
+        * DoB shown
+        * primary email shown
+        * confirmation that names + DoB could be verified were official
+documents
+        * select if TTP [further details TBD]
+        * free-text-field: location of verification meeting - default: empty - needs to be filled
+        * date of verification selection, default: non selected (not before DoB, not after current date+13h) - needs to be set
+          INO: Current Date UTC + 12 h
+          BB: (13h, cause of timezones with +13h)
+        * confirmation that member has accepted the policies
+        * confirmation box, that VPol was followed
+        * Policy acceptance box for agent
+    * if not correct independent of which was wrong:
+      * option to write an automated email to the member that the agent tried to verify the member
+* View all verifications received/done
+  * points, locations, dates of verification, dates of verification entered, name of agent/member, revocations
+* show how my points are calculated
+  * as member, as agent
+* search for agents/etc (what exactly is this community-thing)
+  * Search for agent is referred to seperate site
+* What is about multiple verifications for the same member -> only last verification should count. (New Feature)
+* Experience Points only for the last of such re-verifications (New Features)
+
+=== Organisation management ===
+
+* rethink!
+  * what needs to be done?
+  * what needs to be possible?
+  * how much is this used?
+* The Org area can be shifted back for now.
+
+Roles:
+* OrgAgent: can create and administer the OrgAccounts, administer: add and delete OrgAdmin, add and delete Org Domains, does not have access to the certs
+* OrgMaster: can see the Org account data; add/remove other OrgMasters and OrgAdmins
+* OrgAdmin: can see the org account data; is able to administer the certs
+* SE: is able to see account data, revoke certs (new feature)
+
+Cert Creation:
+* Client Cert with form
+* Client Cert with CSR (New feature)
+* Client Cert with multiple email addresses
+* Multiple Client Certs via file upload and result download (create e.g. 10 certs with one upload) (New Feature)
+* revoke cert via file upload, e.g. file with to email addresses all certs to these addresses will be revoked. (New Feature)
+
+* Filter on client cert page (new feature)
+
+* Domain Cert with CSR
+
+* Org Account History
+  * Org account full history visible by OrgAdmins, SE via Ticket Number
+  * Org Account history only account information without cert history by OrgAgent
+
+* OrgAgent should be able to perform an IsAssuer check.
+
+
+
+=== OpenPGP key signing ===
+* if points >= 50 allow signing of OpenPGP key with real name, no comment field, matching email in account.
+* UserIDs on key to be signed user-selectable.
+* Expiry date: selectable up to maximum allowed
+* re-signing without need to uploade key again
+* Policy acceptance needed for all signatures
+* lookup of keys on keyserver (if present)
+* Ensure key has basic cryptographic security:
+  * conformant to normal certificate's requirements
+  * valid key material
+
+=== Signer interface ===
+* database based
+* allow multiple signer instances
+* job table
+
+=== SE management (not finished) ===
+* nothing happens without support ticket id (that is verified?) <- ES:
+currently the basic account can be seen without a ticket number
+  * Support Ticket, Arbitration; see existing software on this <- ES:
+currently other tickets are allowed, too, but I see no need, as one of
+both should be needed (there will always be a support ticket number, if
+support is addressed as such - there should be no need for anybody to
+neither go this way nor through arbitration (arbitration may have
+reasons to go directly to a supporter but has the authority to do so)
+* every action on a member will cause an email to be sent to him and the
+action is being logged. <- the mail should be optional (to primary
+address) and only once in a given time frame/login, as a supporter may
+need to do more than one thing at a time
+* View/edit users personal details (even if verified)
+* set account flags (code signing, Agent status, block of account, org-admin, support, team memberships)
+* delete/invalidate verifications
+* revoke certificates, pgp-key signatures, both should be possible for single certificates/keys or for all certificates/keys
+* "delete" account
+
+=== automated (outside of a current process) information mails to members ===
+ * certificate(s)/signature expires within the next 14 days (combined or separate)
+
+=== "mass mails" interface (new feature) ===
+  * access only for critical team (or other restricted personal controlled by arbitration)
+  * arbitration case number needed (maybe announcement flags could be allowed for support case numbers or motions, as well)
+  * requester has to be set (identified by email)
+  * text-field for subject
+  * text-field for mail-content
+  * one of the following three should be possible for selection of recipients:
+    * sql-query
+    * list of email addresses
+    * list of account-ids
+    * selection field if this should be noted in account-logs of recipients
+    * announcement flag (general, ...)
+
+=== Statisics ===
+
+* running total for current year
+  * verifications
+  * new members
+  * new agents
+  * lost members
+  * active agents (at least one verification according to the verification date of the current year)
+  * active members (who got their latest verification in the current year)
+
+* running total for last 12 months per month
+  * verifications
+  * new member
+  * new agents
+  * lost members
+  * new certs
+  * revoked certs
+  * active agents / members
+
+* Grand Total
+  * members
+  * verifications
+  * granted VP
+  * user >= 50 and <99 VP
+  * agent candidates
+  * agents
+  * issued client certs
+  * active client certs
+  * revoked client certs
+  * issued server certs
+  * active server certs
+  * revoked server certs
+  * issued org client certs
+  * active org client certs
+  * revoked org client certs
+  * issued org server certs
+  * active org server certs
+  * revoked org server certs
+  * issued gpg certs
+  * active gpg certs
+  * revoked gpg certs
+
+* yearly statistics
+  * verifications
+  * new member
+  * new agents
+  * lost members
+  * new certs
+  * revoked certs
+  * active agents (at least one verification according to the verification date of the current year)
+  * active members
+
+access statistic data via API e.g. verifications per year is needed for coaudit database
+
+the active members may be relevant for any decision in the regard how long verifications need be valid and if they need to be renewed.
+
+=== Premission Review mails (monthly?) ===
+* Regular check and report of permissions for various groups of people
+  INO: currently quarterly
+
+=== Tools ===
+* csr/crt inspector
+* + lookup OCSP/CRL status.
+* OpenPGP key inspector (Yup, we need one)
+* Database Editor CLI tool for crit to update records (and their checksums/timestamping)