Internet Engineering Task Force (IETF)                      T. Takahashi
Request for Comments: 8727                                          NICT
Category: Standards Track                                     R. Danyliw
ISSN: 2070-1721                                                     CERT
                                                              M. Suzuki
                                                                   NICT
                                                            August 2020


   JSON Binding of the Incident Object Description Exchange Format

Abstract

  The Incident Object Description Exchange Format (IODEF) defined in
  RFC 7970 provides an information model and a corresponding XML data
  model for exchanging incident and indicator information.  This
  document gives implementers and operators an alternative format to
  exchange the same information by defining an alternative data model
  implementation in JSON and its encoding in Concise Binary Object
  Representation (CBOR).

Status of This Memo

  This is an Internet Standards Track document.

  This document is a product of the Internet Engineering Task Force
  (IETF).  It represents the consensus of the IETF community.  It has
  received public review and has been approved for publication by the
  Internet Engineering Steering Group (IESG).  Further information on
  Internet Standards is available in Section 2 of RFC 7841.

  Information about the current status of this document, any errata,
  and how to provide feedback on it may be obtained at
  https://www.rfc-editor.org/info/rfc8727.

Copyright Notice

  Copyright (c) 2020 IETF Trust and the persons identified as the
  document authors.  All rights reserved.

  This document is subject to BCP 78 and the IETF Trust's Legal
  Provisions Relating to IETF Documents
  (https://trustee.ietf.org/license-info) in effect on the date of
  publication of this document.  Please review these documents
  carefully, as they describe your rights and restrictions with respect
  to this document.  Code Components extracted from this document must
  include Simplified BSD License text as described in Section 4.e of
  the Trust Legal Provisions and are provided without warranty as
  described in the Simplified BSD License.

Table of Contents

  1.  Introduction
    1.1.  Requirements Language
  2.  IODEF Data Types
    2.1.  Abstract Data Type to JSON Data Type Mapping
    2.2.  Complex JSON Types
      2.2.1.  Integer
      2.2.2.  Multilingual Strings
      2.2.3.  Enum
      2.2.4.  Software and Software Reference
      2.2.5.  Structured Information
      2.2.6.  EXTENSION
  3.  IODEF JSON Data Model
    3.1.  Classes and Elements
    3.2.  Mapping between JSON and XML IODEF
  4.  Examples
    4.1.  Minimal Example
    4.2.  Indicators from a Campaign
  5.  Mapkeys
  6.  The IODEF Data Model (CDDL)
  7.  IANA Considerations
  8.  Security Considerations
  9.  References
    9.1.  Normative References
    9.2.  Informative References
  Appendix A.  Data Types Used in This Document
  Appendix B.  The IODEF Data Model (JSON Schema)
  Acknowledgments
  Authors' Addresses

1.  Introduction

  The Incident Object Description Exchange Format (IODEF) [RFC7970]
  defines a data representation for security incident reports and
  indicators commonly exchanged by operational security teams.  It
  facilitates the automated exchange of this information to enable
  mitigation and watch-and-warning.  An information model using Unified
  Modeling Language (UML) is defined in Section 3 of [RFC7970] and a
  corresponding Extensible Markup Language (XML) schema data model is
  defined in Section 8 of [RFC7970].  This UML-based information model
  and XML-based data model are referred to as IODEF UML and IODEF XML,
  respectively, in this document.

  IODEF documents are structured and thus suitable for machine
  processing.  They will streamline incident response operations.
  Another well-used and structured format that is suitable for machine
  processing is JavaScript Object Notation (JSON) [RFC8259].  To
  facilitate the automation of incident response operations, IODEF
  documents and implementations should support JSON representation and
  its encoding in Concise Binary Object Representation (CBOR)
  [RFC7049].

  This document defines an alternate implementation of the IODEF UML
  information model by specifying a JSON data model using Concise Data
  Definition Language (CDDL) [RFC8610] and a JSON Schema [JSON-SCHEMA].
  This JSON data model is referred to as IODEF JSON in this document.
  IODEF JSON provides all of the expressivity of IODEF XML.  It gives
  implementers and operators an alternative format to exchange the same
  information.

  The normative IODEF JSON data model is found in Section 6.  Sections
  2 and 3 describe the data types and elements of this data model.
  Section 4 provides examples.

1.1.  Requirements Language

  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
  "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
  "OPTIONAL" in this document are to be interpreted as described in
  BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
  capitals, as shown here.

2.  IODEF Data Types

  IODEF JSON implements the abstract data types specified in Section 2
  of [RFC7970].

2.1.  Abstract Data Type to JSON Data Type Mapping

  IODEF JSON uses native and derived JSON data types.  Table 1
  describes the mapping between the abstract data types in Section 2 of
  [RFC7970] and their corresponding implementations in IODEF JSON.

  +=================+==========================+================+
  | IODEF Data Type | Reference                | JSON Data Type |
  +=================+==========================+================+
  | INTEGER         | Section 2.1 of [RFC7970] | integer; see   |
  |                 |                          | Section 2.2.1  |
  +-----------------+--------------------------+----------------+
  | REAL            | Section 2.2 of [RFC7970] | "number" per   |
  |                 |                          | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | CHARACTER       | Section 2.3 of [RFC7970] | "string" per   |
  |                 |                          | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | STRING          | Section 2.3 of [RFC7970] | "string" per   |
  |                 |                          | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | ML_STRING       | Section 2.4 of [RFC7970] | see            |
  |                 |                          | Section 2.2.2  |
  +-----------------+--------------------------+----------------+
  | BYTE            | Section 2.5.1 of         | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | BYTE[]          | Section 2.5.1 of         | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | HEXBIN          | Section 2.5.2 of         | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | HEXBIN[]        | Section 2.5.2 of         | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | ENUM            | Section 2.6 of [RFC7970] | see            |
  |                 |                          | Section 2.2.3  |
  +-----------------+--------------------------+----------------+
  | DATETIME        | Section 2.7 of [RFC7970] | "string" per   |
  |                 |                          | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | TIMEZONE        | Section 2.8 of [RFC7970] | "string" per   |
  |                 |                          | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | PORTLIST        | Section 2.9 of [RFC7970] | "string" per   |
  |                 |                          | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | POSTAL          | Section 2.10 of          | ML_STRING; see |
  |                 | [RFC7970]                | Section 2.2.2  |
  +-----------------+--------------------------+----------------+
  | PHONE           | Section 2.11 of          | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | EMAIL           | Section 2.12 of          | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | URL             | Section 2.13 of          | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | ID              | Section 2.14 of          | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | IDREF           | Section 2.14 of          | "string" per   |
  |                 | [RFC7970]                | [RFC8259]      |
  +-----------------+--------------------------+----------------+
  | SOFTWARE        | Section 2.15 of          | see            |
  |                 | [RFC7970]                | Section 2.2.4  |
  +-----------------+--------------------------+----------------+
  | STRUCTUREDINFO  | Section 4.4 of [RFC7203] | see            |
  |                 |                          | Section 2.2.5  |
  +-----------------+--------------------------+----------------+
  | EXTENSION       | Section 2.16 of          | see            |
  |                 | [RFC7970]                | Section 2.2.6  |
  +-----------------+--------------------------+----------------+

                      Table 1: JSON Data Types

  +=================+================+=============================+
  | IODEF Data Type | CBOR Data Type | CDDL Prelude [RFC8610]      |
  +=================+================+=============================+
  | INTEGER         | 0, 1, 6 tag 2, | integer                     |
  |                 | 6 tag 3        |                             |
  +-----------------+----------------+-----------------------------+
  | REAL            | 7 bits 26      | float32                     |
  +-----------------+----------------+-----------------------------+
  | CHARACTER       | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | STRING          | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | ML_STRING       | 5              | Maps/Structs (Section 3.5.1 |
  |                 |                | of [RFC8610])               |
  +-----------------+----------------+-----------------------------+
  | BYTE            | 6 tag 22       | eb64legacy                  |
  +-----------------+----------------+-----------------------------+
  | BYTE[]          | 6 tag 22       | eb64legacy                  |
  +-----------------+----------------+-----------------------------+
  | HEXBIN          | 6 tag 23       | eb16                        |
  +-----------------+----------------+-----------------------------+
  | HEXBIN[]        | 6 tag 23       | eb16                        |
  +-----------------+----------------+-----------------------------+
  | ENUM            | -              | Choices (Section 2.2.2 of   |
  |                 |                | [RFC8610])                  |
  +-----------------+----------------+-----------------------------+
  | DATETIME        | 6 tag 0        | tdate                       |
  +-----------------+----------------+-----------------------------+
  | TIMEZONE        | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | PORTLIST        | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | POSTAL          | 3              | ML_STRING (Section 2.2.2)   |
  +-----------------+----------------+-----------------------------+
  | PHONE           | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | EMAIL           | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | URL             | 6 tag 32       | uri                         |
  +-----------------+----------------+-----------------------------+
  | ID              | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | IDREF           | 3              | text                        |
  +-----------------+----------------+-----------------------------+
  | SOFTWARE        | 5              | Maps/Structs (Section 3.5.1 |
  |                 |                | of [RFC8610])               |
  +-----------------+----------------+-----------------------------+
  | STRUCTUREDINFO  | 5              | Maps/Structs (Section 3.5.1 |
  |                 |                | of [RFC8610])               |
  +-----------------+----------------+-----------------------------+
  | EXTENSION       | 5              | Maps/Structs (Section 3.5.1 |
  |                 |                | of [RFC8610])               |
  +-----------------+----------------+-----------------------------+

                       Table 2: CBOR Data Types

2.2.  Complex JSON Types

2.2.1.  Integer

  An integer is a subset of the "number" type of JSON, which represents
  signed digits encoded in Base 10.  The definition of this integer is
  "[ minus ] int" per [RFC8259], Section 6.

2.2.2.  Multilingual Strings

  A string that needs to be represented in a human-readable language
  different from the default encoding of the document is represented in
  the information model by the ML_STRING data type.  This data type is
  implemented as either an object with "value", "lang", and
  "translation-id" elements or a text string as defined in Section 6.
  An example is shown below.

  "MLStringType": {
    "value": "free-form text",                              # STRING
    "lang": "en",                                             # ENUM
    "translation-id": "jp2en0023"                           # STRING
  }

  Note that in figures throughout this document, some supplementary
  information follows "#", but these are not valid syntax in JSON;
  instead, they are intended to facilitate reader understanding.

2.2.3.  Enum

  Enum is an ordered list of acceptable string values.  Each value has
  a representative keyword.  Within the data model, the enumerated type
  keywords are used as attribute values.

2.2.4.  Software and Software Reference

  A particular version of software is represented in the information
  model by the SOFTWARE data type.  This software can be described by
  using a reference, a Uniform Resource Locator (URL) [RFC3986], or
  free-form text.  The SOFTWARE data type is implemented as an object
  with "SoftwareReference", "URL", and "Description" elements as
  defined in Section 6.  Examples are shown below.

  "SoftwareType": {
    "SoftwareReference": {...},                  # SoftwareReference
    "Description": ["MS Windows"]                           # STRING
  }

  SoftwareReference class is a reference to a particular version of
  software.  Examples are shown below.

  "SoftwareReference": {
    "value": "cpe:/a:google:chrome:59.0.3071.115",          # STRING
    "spec-name": "cpe",                                       # ENUM
    "dtype": "string"                                         # ENUM
  }

2.2.5.  Structured Information

  Information provided in the form of a structured string, such as an
  ID, or structured information, such as XML documents, is represented
  in the information model by the STRUCTUREDINFO data type.  Note that
  this type was originally specified in Section 4.4 of [RFC7203] as a
  basic structure of its extension classes.  The STRUCTUREDINFO data
  type is implemented as an object with "SpecID", "ext-SpecID",
  "ContentID", "RawData", and "Reference" elements.  An example for
  embedding a structured ID is shown below.

  "STRUCTUREDINFO": {
    "SpecID": "urn:ietf:params:xml:ns:mile:cwe:3.3",          # ENUM
    "ContentID": "CWE-89"                                   # STRING
  }

  When embedding the raw data, it should be encoded as a BYTE type
  object, as shown below.

  "STRUCTUREDINFO": {
    "SpecID": "urn:ietf:params:xml:ns:mile:mmdef:1.2",        # ENUM
    "RawData": "<<< encoded structured data >>>"              # BYTE
  }

  When embedding the raw data, base64 encoding defined in Section 4 of
  [RFC4648] MUST be used for JSON IODEF while binary representation
  MUST be used for CBOR IODEF.

2.2.6.  EXTENSION

  Information not otherwise represented in the IODEF can be added using
  the EXTENSION data type.  This data type is a generic extension
  mechanism.  The EXTENSION data type is implemented as an
  ExtensionType object with "value", "name", "dtype", "ext-dtype",
  "meaning", "formatid", "restriction", "ext-restriction", and
  "observable-id" elements.  An example for embedding a structured ID
  is shown below.

  "ExtensionType": {
    "value": "xxxxxxx",                                     # STRING
    "name": "Syslog",                                       # STRING
    "dtype": "string",                                        # ENUM
    "meaning": "Syslog from the security appliance X"       # STRING
  }

  Note that this data type is specified in [RFC7970] as its generic
  extension mechanism.  If a data item has internal structure that is
  intended to be processed outside of the IODEF framework, one may
  consider using the STRUCTUREDINFO data type mentioned in
  Section 2.2.5.

3.  IODEF JSON Data Model

3.1.  Classes and Elements

  The following table shows the list of IODEF classes and their
  elements and the corresponding sections in [RFC7970].  Note that the
  complete JSON schema is defined in Section 6 using CDDL.

  +===========================+============================+==========+
  | IODEF Class               | Class, Element, and        |Section in|
  |                           | Attribute                  |[RFC7970] |
  +===========================+============================+==========+
  | IODEF-Document            | version                    | 3.1      |
  |                           | lang?                      |          |
  |                           | format-id?                 |          |
  |                           | private-enum-name?         |          |
  |                           | private-enum-id?           |          |
  |                           | Incident+                  |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | Incident                  | purpose                    | 3.2      |
  |                           | ext-purpose?               |          |
  |                           | status?                    |          |
  |                           | ext-status?                |          |
  |                           | lang?                      |          |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | IncidentID                 |          |
  |                           | AlternativeID?             |          |
  |                           | RelatedActivity*           |          |
  |                           | DetectTime?                |          |
  |                           | StartTime?                 |          |
  |                           | EndTime?                   |          |
  |                           | RecoveryTime?              |          |
  |                           | ReportTime?                |          |
  |                           | GenerationTime             |          |
  |                           | Description*               |          |
  |                           | Discovery*                 |          |
  |                           | Assessment*                |          |
  |                           | Method*                    |          |
  |                           | Contact+                   |          |
  |                           | EventData*                 |          |
  |                           | Indicator*                 |          |
  |                           | History?                   |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | IncidentID                | id                         | 3.4      |
  |                           | name                       |          |
  |                           | instance?                  |          |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  +---------------------------+----------------------------+----------+
  | AlternativeID             | restriction?               | 3.5      |
  |                           | ext-restriction?           |          |
  |                           | IncidentID+                |          |
  +---------------------------+----------------------------+----------+
  | RelatedActivity           | restriction?               | 3.6      |
  |                           | ext-restriction?           |          |
  |                           | IncidentID*                |          |
  |                           | URL*                       |          |
  |                           | ThreatActor*               |          |
  |                           | Campaign*                  |          |
  |                           | IndicatorID*               |          |
  |                           | Confidence?                |          |
  |                           | Description*               |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | ThreatActor               | restriction?               | 3.7      |
  |                           | ext-restriction?           |          |
  |                           | ThreatActorID*             |          |
  |                           | URL*                       |          |
  |                           | Description*               |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | Campaign                  | restriction?               | 3.8      |
  |                           | ext-restriction?           |          |
  |                           | CampaignID*                |          |
  |                           | URL*                       |          |
  |                           | Description*               |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | Contact                   | role                       | 3.9      |
  |                           | ext-role?                  |          |
  |                           | type                       |          |
  |                           | ext-type?                  |          |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  |                           | ContactName*               |          |
  |                           | ContactTitle*              |          |
  |                           | Description*               |          |
  |                           | RegistryHandle*            |          |
  |                           | PostalAddress*             |          |
  |                           | Email*                     |          |
  |                           | Telephone*                 |          |
  |                           | Timezone?                  |          |
  |                           | Contact*                   |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | RegistryHandle            | handle                     | 3.9.1    |
  |                           | registry                   |          |
  |                           | ext-registry?              |          |
  +---------------------------+----------------------------+----------+
  | PostalAddress             | type?                      | 3.9.2    |
  |                           | ext-type?                  |          |
  |                           | PAddress                   |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | Email                     | type?                      | 3.9.3    |
  |                           | ext-type?                  |          |
  |                           | EmailTo                    |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | Telephone                 | type?                      | 3.9.4    |
  |                           | ext-type?                  |          |
  |                           | TelephoneNumber            |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | Discovery                 | source?                    | 3.10     |
  |                           | ext-source?                |          |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  |                           | Description*               |          |
  |                           | Contact*                   |          |
  |                           | DetectionPattern*          |          |
  +---------------------------+----------------------------+----------+
  | DetectionPattern          | restriction?               | 3.10.1   |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | Application                |          |
  |                           | Description*               |          |
  |                           | DetectionConfiguration*    |          |
  +---------------------------+----------------------------+----------+
  | Method                    | restriction?               | 3.11     |
  |                           | ext-restriction?           |          |
  |                           | Reference*                 |          |
  |                           | Description*               |          |
  |                           | AttackPattern*             |          |
  |                           | Vulnerability*             |          |
  |                           | Weakness*                  |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | Weakness                  | restriction?               | 4.5.5 in |
  |                           | ext-restriction?           |[RFC7203] |
  +---------------------------+----------------------------+----------+
  | Reference                 | observable-id?             | 3.11.1   |
  |                           | ReferenceName?             |          |
  |                           | URL*                       |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | Assessment                | occurrence?                | 3.12     |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | IncidentCategory*          |          |
  |                           | SystemImpact*              |          |
  |                           | BusinessImpact*            |          |
  |                           | TimeImpact*                |          |
  |                           | MonetaryImpact*            |          |
  |                           | IntendedImpact*            |          |
  |                           | Counter*                   |          |
  |                           | MitigatingFactor*          |          |
  |                           | Cause*                     |          |
  |                           | Confidence?                |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | SystemImpact              | severity?                  | 3.12.1   |
  |                           | completion?                |          |
  |                           | type                       |          |
  |                           | ext-type?                  |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | BusinessImpact            | severity?                  | 3.12.2   |
  |                           | ext-severity?              |          |
  |                           | type                       |          |
  |                           | ext-type?                  |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | TimeImpact                | value                      | 3.12.3   |
  |                           | severity?                  |          |
  |                           | metric                     |          |
  |                           | ext-metric?                |          |
  |                           | duration?                  |          |
  |                           | ext-duration?              |          |
  +---------------------------+----------------------------+----------+
  | MonetaryImpact            | value                      | 3.12.4   |
  |                           | severity?                  |          |
  |                           | currency?                  |          |
  +---------------------------+----------------------------+----------+
  | Confidence                | value                      | 3.12.5   |
  |                           | rating                     |          |
  |                           | ext-rating?                |          |
  +---------------------------+----------------------------+----------+
  | History                   | restriction?               | 3.13     |
  |                           | ext-restriction?           |          |
  |                           | HistoryItem+               |          |
  +---------------------------+----------------------------+----------+
  | HistoryItem               | action                     | 3.13.1   |
  |                           | ext-action?                |          |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | DateTime                   |          |
  |                           | IncidentID?                |          |
  |                           | Contact?                   |          |
  |                           | Description*               |          |
  |                           | DefinedCOA*                |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | EventData                 | restriction?               | 3.14     |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | Description*               |          |
  |                           | DetectTime?                |          |
  |                           | StartTime?                 |          |
  |                           | EndTime?                   |          |
  |                           | RecoveryTime?              |          |
  |                           | ReportTime?                |          |
  |                           | Contact*                   |          |
  |                           | Discovery*                 |          |
  |                           | Assessment?                |          |
  |                           | Method*                    |          |
  |                           | System*                    |          |
  |                           | Expectation*               |          |
  |                           | RecordData*                |          |
  |                           | EventData*                 |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | Expectation               | action?                    | 3.15     |
  |                           | ext-action?                |          |
  |                           | severity?                  |          |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | Description*               |          |
  |                           | DefinedCOA*                |          |
  |                           | StartTime?                 |          |
  |                           | EndTime?                   |          |
  |                           | Contact?                   |          |
  +---------------------------+----------------------------+----------+
  | System                    | category?                  | 3.17     |
  |                           | ext-category?              |          |
  |                           | interface?                 |          |
  |                           | spoofed?                   |          |
  |                           | virtual?                   |          |
  |                           | ownership?                 |          |
  |                           | ext-ownership?             |          |
  |                           | restriction?               |          |
  |                           | ext-restriction?           |          |
  |                           | Node                       |          |
  |                           | NodeRole*                  |          |
  |                           | Service*                   |          |
  |                           | OperatingSystem*           |          |
  |                           | Counter*                   |          |
  |                           | AssetID*                   |          |
  |                           | Description*               |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | Node                      | DomainData*                | 3.18     |
  |                           | Address*                   |          |
  |                           | PostalAddress?             |          |
  |                           | Location*                  |          |
  |                           | Counter*                   |          |
  +---------------------------+----------------------------+----------+
  | Address                   | value                      | 3.18.1   |
  |                           | category                   |          |
  |                           | ext-category?              |          |
  |                           | vlan-name?                 |          |
  |                           | vlan-num?                  |          |
  |                           | observable-id?             |          |
  +---------------------------+----------------------------+----------+
  | NodeRole                  | category                   | 3.18.2   |
  |                           | ext-category?              |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | Counter                   | value                      | 3.18.3   |
  |                           | type                       |          |
  |                           | ext-type?                  |          |
  |                           | unit                       |          |
  |                           | ext-unit?                  |          |
  |                           | meaning?                   |          |
  |                           | duration?                  |          |
  |                           | ext-duration?              |          |
  +---------------------------+----------------------------+----------+
  | DomainData                | system-status              | 3.19     |
  |                           | ext-system-status?         |          |
  |                           | domain-status              |          |
  |                           | ext-domain-status?         |          |
  |                           | observable-id?             |          |
  |                           | Name                       |          |
  |                           | DateDomainWasChecked?      |          |
  |                           | RegistrationDate?          |          |
  |                           | ExpirationDate?            |          |
  |                           | RelatedDNS*                |          |
  |                           | Nameservers*               |          |
  |                           | DomainContacts?            |          |
  +---------------------------+----------------------------+----------+
  | Nameservers               | Server                     | 3.19.1   |
  |                           | Address*                   |          |
  +---------------------------+----------------------------+----------+
  | DomainContacts            | SameDomainContact?         | 3.19.2   |
  |                           | Contact+                   |          |
  +---------------------------+----------------------------+----------+
  | Service                   | ip-protocol?               | 3.20     |
  |                           | observable-id?             |          |
  |                           | ServiceName?               |          |
  |                           | Port?                      |          |
  |                           | Portlist?                  |          |
  |                           | ProtoCode?                 |          |
  |                           | ProtoType?                 |          |
  |                           | ProtoField?                |          |
  |                           | ApplicationHeaderField*    |          |
  |                           | EmailData?                 |          |
  |                           | Application?               |          |
  +---------------------------+----------------------------+----------+
  | ServiceName               | IANAService?               | 3.20.1   |
  |                           | URL*                       |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | EmailData                 | observable-id?             | 3.21     |
  |                           | EmailTo*                   |          |
  |                           | EmailFrom?                 |          |
  |                           | EmailSubject?              |          |
  |                           | EmailX-Mailer?             |          |
  |                           | EmailHeaderField*          |          |
  |                           | EmailHeaders?              |          |
  |                           | EmailBody?                 |          |
  |                           | EmailMessage?              |          |
  |                           | HashData*                  |          |
  |                           | Signature*                 |          |
  +---------------------------+----------------------------+----------+
  | RecordData                | restriction?               | 3.22.1   |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | DateTime?                  |          |
  |                           | Description*               |          |
  |                           | Application?               |          |
  |                           | RecordPattern*             |          |
  |                           | RecordItem*                |          |
  |                           | URL*                       |          |
  |                           | FileData*                  |          |
  |                           |WindowsRegistryKeysModified*|          |
  |                           | CertificateData*           |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | RecordPattern             | type                       | 3.22.2   |
  |                           | ext-type?                  |          |
  |                           | offset?                    |          |
  |                           | offsetunit?                |          |
  |                           | ext-offsetunit?            |          |
  |                           | instance?                  |          |
  |                           | value                      |          |
  +---------------------------+----------------------------+----------+
  |WindowsRegistryKeysModified| observable-id?             | 3.23     |
  |                           | Key+                       |          |
  +---------------------------+----------------------------+----------+
  | Key                       | registryaction?            | 3.23.1   |
  |                           | ext-registryaction?        |          |
  |                           | observable-id?             |          |
  |                           | KeyName                    |          |
  |                           | KeyValue?                  |          |
  +---------------------------+----------------------------+----------+
  | CertificateData           | restriction?               | 3.24     |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | Certificate+               |          |
  +---------------------------+----------------------------+----------+
  | Certificate               | observable-id?             | 3.24.1   |
  |                           | X509Data                   |          |
  |                           | Description*               |          |
  +---------------------------+----------------------------+----------+
  | FileData                  | restriction?               | 3.25     |
  |                           | ext-restriction?           |          |
  |                           | observable-id?             |          |
  |                           | File+                      |          |
  +---------------------------+----------------------------+----------+
  | File                      | observable-id?             | 3.25.1   |
  |                           | FileName?                  |          |
  |                           | FileSize?                  |          |
  |                           | FileType?                  |          |
  |                           | URL*                       |          |
  |                           | HashData?                  |          |
  |                           | Signature*                 |          |
  |                           | AssociatedSoftware?        |          |
  |                           | FileProperties*            |          |
  +---------------------------+----------------------------+----------+
  | HashData                  | scope                      | 3.26     |
  |                           | HashTargetID?              |          |
  |                           | Hash*                      |          |
  |                           | FuzzyHash*                 |          |
  +---------------------------+----------------------------+----------+
  | Hash                      | DigestMethod               | 3.26.1   |
  |                           | DigestValue                |          |
  |                           | CanonicalizationMethod?    |          |
  |                           | Application?               |          |
  +---------------------------+----------------------------+----------+
  | FuzzyHash                 | FuzzyHashValue+            | 3.26.2   |
  |                           | Application?               |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | Indicator                 | restriction?               | 3.29     |
  |                           | ext-restriction?           |          |
  |                           | IndicatorID                |          |
  |                           | AlternativeIndicatorID*    |          |
  |                           | Description*               |          |
  |                           | StartTime?                 |          |
  |                           | EndTime?                   |          |
  |                           | Confidence?                |          |
  |                           | Contact*                   |          |
  |                           | Observable?                |          |
  |                           | uid-ref?                   |          |
  |                           | IndicatorExpression?       |          |
  |                           | IndicatorReference?        |          |
  |                           | NodeRole*                  |          |
  |                           | AttackPhase*               |          |
  |                           | Reference*                 |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | IndicatorID               | id                         | 3.29.1   |
  |                           | name                       |          |
  |                           | version                    |          |
  +---------------------------+----------------------------+----------+
  | AlternativeIndicatorID    | restriction?               | 3.29.2   |
  |                           | ext-restriction?           |          |
  |                           | IndicatorID+               |          |
  +---------------------------+----------------------------+----------+
  | Observable                | restriction?               | 3.29.3   |
  |                           | ext-restriction?           |          |
  |                           | System?                    |          |
  |                           | Address?                   |          |
  |                           | DomainData?                |          |
  |                           | Service?                   |          |
  |                           | EmailData?                 |          |
  |                           |WindowsRegistryKeysModified?|          |
  |                           | FileData?                  |          |
  |                           | CertificateData?           |          |
  |                           | RegistryHandle?            |          |
  |                           | RecordData?                |          |
  |                           | EventData?                 |          |
  |                           | Incident?                  |          |
  |                           | Expectation?               |          |
  |                           | Reference?                 |          |
  |                           | Assessment?                |          |
  |                           | DetectionPattern?          |          |
  |                           | HistoryItem?               |          |
  |                           | BulkObservable?            |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | BulkObservable            | type?                      | 3.29.3.1 |
  |                           | ext-type?                  |          |
  |                           | BulkObservableFormat?      |          |
  |                           | BulkObservableList         |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | BulkObservableFormat      | Hash?                      |3.29.3.1.1|
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | IndicatorExpression       | operator?                  | 3.29.4   |
  |                           | ext-operator?              |          |
  |                           | IndicatorExpression*       |          |
  |                           | Observable*                |          |
  |                           | uid-ref*                   |          |
  |                           | IndicatorReference*        |          |
  |                           | Confidence?                |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+
  | IndicatorReference        | uid-ref?                   | 3.29.7   |
  |                           | euid-ref?                  |          |
  |                           | version?                   |          |
  +---------------------------+----------------------------+----------+
  | AttackPhase               | AttackPhaseID*             | 3.29.8   |
  |                           | URL*                       |          |
  |                           | Description*               |          |
  |                           | AdditionalData*            |          |
  +---------------------------+----------------------------+----------+

                          Table 3: IODEF Classes

3.2.  Mapping between JSON and XML IODEF

  *  Attributes and elements of each class in the XML IODEF document
     are both presented as JSON attributes in the JSON IODEF document,
     and the order of their appearances is ignored.

  *  Flow class is deleted, and classes with its instances now directly
     have instances of the EventData class that used to belong to the
     Flow class.

  *  ApplicationHeader class is deleted, and classes with its instances
     now directly have instances of the ApplicationHeaderField class
     that used to belong to the ApplicationHeader class.

  *  SignatureData class is deleted, and classes with its instances now
     directly have instances of the Signature class that used to belong
     to the SignatureData class.

  *  IndicatorData class is deleted, and classes with its instances now
     directly have instances of the Indicator class that used to belong
     to the IndicatorData class.

  *  ObservableReference class is deleted, and classes with its
     instances now directly have uid-ref as an element.

  *  Record class is deleted, and classes with its instances now
     directly have instances of the RecordData class that used to
     belong to the Record class.

  *  The MLStringType was modified to support simple string by allowing
     the type to have not only a predefined object type but also a text
     type, in order to allow simple descriptions of elements of the
     type.  Implementations need to be capable of parsing an
     MLStringType that could take the form of both text and an object.

  *  The elements of the ML_STRING type in the XML IODEF document are
     presented as either STRING type or ML_STRING type in the JSON
     IODEF document.  When converting from the XML IODEF document to
     the JSON IODEF document, or vice versa, the information contained
     in the original data of the ML_STRING type must be preserved.
     When STRING is used instead of ML_STRING, parsers can assume that
     its "xml:lang" is set to "en".

  *  Data models of the extension classes defined by [RFC7203] and
     referenced by [RFC7970] are represented by the STRUCTUREDINFO
     class defined in this document.

  *  Signature, X509Data, and RawData are encoded using base64 encoding
     for JSON IODEF and binary representation for CBOR IODEF to
     represent them as BYTE objects.

  *  EmailBody represents a whole message body including MIME structure
     in the same manner defined in [RFC7970].  In case of an email
     composed of a MIME multipart, the EmailBody contains multiple body
     parts separated by boundary strings.

  *  The "ipv6-net-mask" type attribute of the BulkObservable class
     remains available for the purpose of backward compatibility, but
     the use of this attribute is not recommended because IPv6 does not
     use netmask any more.

  *  ENUM values in this document are extensible and managed by IANA,
     which is also the case in [RFC7970].  The values in the table are
     used both by [RFC7970] implementations and by their JSON (and
     CBOR) bindings as specified by this document.

  *  This document uses JSON's "number" type to represent integers that
     only have full precision for integer values between -2^(53) and
     2^(53).  When dealing with integers outside the range, this issue
     needs to be considered.

  *  Binaries are encoded in bytes.  Note that XML IODEF in [RFC7970]
     uses HEXBIN due to the incapability of XML for embedding binaries
     as they are.

4.  Examples

  This section provides examples of IODEF documents.  These examples do
  not represent the full capabilities of the data model or the only way
  to encode particular information.

4.1.  Minimal Example

  A document containing only the mandatory elements and attributes is
  shown below in JSON and CBOR, respectively.

  {
    "version": "2.0",
    "lang": "en",
    "Incident": [{
        "purpose": "reporting",
        "restriction": "private",
        "IncidentID": {
          "id": "492382",
          "name": "csirt.example.com"
        },
        "GenerationTime": "2015-07-18T09:00:00-05:00",
        "Contact": [{
            "type": "organization",
            "role": "creator",
            "Email": [{"EmailTo": "[email protected]"}]
        }]
    }]
  }

                   Figure 1: A Minimal Example in JSON

  A3                                    # map(3)
     37                                 # negative(23)
     63                                 # text(3)
        322E30                          # "2.0"
     36                                 # negative(22)
     62                                 # text(2)
        656E                            # "en"
     32                                 # negative(18)
     81                                 # array(1)
        A5                              # map(5)
           21                           # negative(1)
           69                           # text(9)
              7265706F7274696E67        # "reporting"
           29                           # negative(9)
           67                           # text(7)
              70726976617465            # "private"
           02                           # unsigned(2)
           A2                           # map(2)
              12                        # unsigned(18)
              66                        # text(6)
                 343932333832           # "492382"
              2E                        # negative(14)
              71                        # text(17)
                 63736972742E6578616D706C652E636F6D
                                        # "csirt.example.com"
           0A                           # unsigned(10)
           78 19                        # text(25)
              323031352D30372D31385430393A30303A30302D30353A3030
                                        # "2015-07-18T09:00:00
                                        # -05:00"
           0E                           # unsigned(14)
           81                           # array(1)
              A3                        # map(3)
                 18 1C                  # unsigned(28)
                 6C                     # text(12)
                    6F7267616E697A6174696F6E # "organization"
                 18 1A                  # unsigned(26)
                 67                     # text(7)
                    63726561746F72      # "creator"
                 18 22                  # unsigned(34)
                 81                     # array(1)
                    A1                  # map(1)
                       18 29            # unsigned(41)
                       78 19            # text(25)
                          636F6E746163744063736972742E6578616D70
                          6C652E636F6D
                                        # "[email protected]"

                   Figure 2: A Minimal Example in CBOR

4.2.  Indicators from a Campaign

  An example of C2 domains from a given campaign is shown below in JSON
  and CBOR, respectively.

  {
    "version": "2.0",
    "lang": "en",
    "Incident": [{
      "purpose": "watch",
      "restriction": "green",
      "IncidentID": {
        "id": "897923",
        "name": "csirt.example.com"
      },
      "RelatedActivity": [{
        "ThreatActor": [{
          "ThreatActorID": ["TA-12-AGGRESSIVE-BUTTERFLY"],
          "Description": ["Aggressive Butterfly"]}],
        "Campaign": [{
          "CampaignID": ["C-2015-59405"],
          "Description": ["Orange Giraffe"]
        }]
      }],
      "GenerationTime": "2015-10-02T11:18:00-05:00",
      "Description": ["Summarizes the Indicators of Compromise for the
        Orange Giraffe campaign of the Aggressive Butterfly crime
        gang."],
      "Assessment": [{
        "Impact": [{"BusinessImpact": {"type": "breach-proprietary"}}]
      }],
      "Contact": [{
        "type": "organization",
        "role": "creator",
        "ContactName": ["CSIRT for example.com"],
        "Email": [{
          "EmailTo": "[email protected]"
        }]
      }],
      "Indicator": [{
        "IndicatorID": {
          "id": "G90823490",
          "name": "csirt.example.com",
          "version": "1"
        },
        "Description": ["C2 domains"],
        "StartTime": "2014-12-02T11:18:00-05:00",
        "Observable": {
          "BulkObservable": {
            "type": "domain-name",
            "BulkObservableList": "kj290023j09r34.example.com"}
        }
      }]
    }]
  }

               Figure 3: Indicators from a Campaign in JSON

  A3                                      # map(3)
     37                                   # negative(23)
     63                                   # text(3)
        322E30                            # "2.0"
     36                                   # negative(22)
     62                                   # text(2)
        656E                              # "en"
     32                                   # negative(18)
     81                                   # array(1)
        A9                                # map(9)
           21                             # negative(1)
           65                             # text(5)
              7761746368                  # "watch"
           29                             # negative(9)
           65                             # text(5)
              677265656E                  # "green"
           02                             # unsigned(2)
           A2                             # map(2)
              12                          # unsigned(18)
              66                          # text(6)
                 383937393233             # "897923"
              2E                          # negative(14)
              71                          # text(17)
                 63736972742E6578616D706C652E636F6D
                                          # "csirt.example.com"
           04                             # unsigned(4)
           81                             # array(1)
              A2                          # map(2)
                 14                       # unsigned(20)
                 81                       # array(1)
                    A2                    # map(2)
                       18 18              # unsigned(24)
                       81                 # array(1)
                          78 1A           # text(26)
                             54412D31322D414747524553534956452D4
                             25554544552464C59
                                          # "TA-12-AGGRESSIVE
                                          # -BUTTERFLY"
                       24                 # negative(4)
                       81                 # array(1)
                          74              # text(20)
                             41676772657373697665204275747465726
                             66C79
                                          # "Aggressive Butterfly"
                 15                       # unsigned(21)
                 81                       # array(1)
                    A2                    # map(2)
                       18 19              # unsigned(25)
                       81                 # array(1)
                          6C              # text(12)
                             432D323031352D3539343035
                                          # "C-2015-59405"
                       24                 # negative(4)
                       81                 # array(1)
                          6E              # text(14)
                             4F72616E67652047697261666665
   # "Orange Giraffe"
           0A                             # unsigned(10)
           78 19                          # text(25)
              323031352D31302D30325431313A31383A30302D30353A3030
                                         # "2015-10-02T11:18:00-05:00"
           24                             # negative(4)
           81                             # array(1)
              78 6F                       # text(111)
                 53756D6D6172697A65732074686520496E64696361746F7
                 273206F6620436F6D70726F6D69736520666F7220746865
                 204F72616E676520476972616666652063616D706169676
                 E206F662074686520416767726573736976652042757474
                 6572666C79206372696D652067616E672E
                                          # "Summarizes the Indicators
                                          # of Compromise for the
                                          # Orange Giraffe campaign
                                          # of the Aggressive
                                          # Butterfly crime gang."
           0C                             # unsigned(12)
           81                             # array(1)
              A1                          # map(1)
                 18 3F                    # unsigned(63)
                 81                       # array(1)
                    A1                    # map(1)
                       18 41              # unsigned(65)
                       A1                 # map(1)
                          18 1C           # unsigned(28)
                          72              # text(18)
                             6272656163682D70726F7072696574617279
                                          # "breach-proprietary"
           0E                             # unsigned(14)
           81                             # array(1)
              A4                          # map(4)
                 18 1C                    # unsigned(28)
                 6C                       # text(12)
                    6F7267616E697A6174696F6E
                                          # "organization"
                 18 1A                    # unsigned(26)
                 67                       # text(7)
                    63726561746F72        # "creator"
                 18 1E                    # unsigned(30)
                 81                       # array(1)
                    75                    # text(21)
                       435349525420666F72206578616D706C652E636F6D
                                          # "CSIRT for example.com"
                 18 22                    # unsigned(34)
                 81                       # array(1)
                    A1                    # map(1)
                       18 29              # unsigned(41)
                       78 19              # text(25)
                          636F6E746163744063736972742E6578616D70
                          6C652E636F6D
                                         # "[email protected]"
           10                             # unsigned(16)
           81                             # array(1)
              A4                          # map(4)
                 16                       # unsigned(22)
                 A3                       # map(3)
                    12                    # unsigned(18)
                    69                    # text(9)
                       473930383233343930 # "G90823490"
                    2E                    # negative(14)
                    71                    # text(17)
                       63736972742E6578616D706C652E636F6D
                                          # "csirt.example.com"
                    37                    # negative(23)
                    61                    # text(1)
                       31                 # "1"
                 24                       # negative(4)
                 81                       # array(1)
                    6A                    # text(10)
                       433220646F6D61696E73 # "C2 domains"
                 06                       # unsigned(6)
                 78 19                    # text(25)
                    323031342D31322D30325431313A31383A30302D30353A3030
                                         # "2014-12-02T11:18:00-05:00"
                 18 AB                    # unsigned(171)
                 A1                       # map(1)
                    18 B0                 # unsigned(176)
                    A2                    # map(2)
                       18 1C              # unsigned(28)
                       6B                 # text(11)
                          646F6D61696E2D6E616D65
                                          # "domain-name"
                       18 B2              # unsigned(178)
                       78 1A              # text(26)
                          6B6A3239303032336A30397233342E6578616D
                          706C652E636F6D
                                        # "kj290023j09r34.example.com"

               Figure 4: Indicators from a Campaign in CBOR

5.  Mapkeys

  The mapkeys are provided in Table 4 for minimizing the CBOR size.

  +===================================+=========+
  | mapkey                            | cborkey |
  +===================================+=========+
  | iodef-version                     | -24     |
  +-----------------------------------+---------+
  | iodef-lang                        | -23     |
  +-----------------------------------+---------+
  | iodef-format-id                   | -22     |
  +-----------------------------------+---------+
  | iodef-private-enum-name           | -21     |
  +-----------------------------------+---------+
  | iodef-private-enum-id             | -20     |
  +-----------------------------------+---------+
  | iodef-Incident                    | -19     |
  +-----------------------------------+---------+
  | iodef-AdditionalData              | -18     |
  +-----------------------------------+---------+
  | iodef-value                       | -17     |
  +-----------------------------------+---------+
  | iodef-translation-id              | -16     |
  +-----------------------------------+---------+
  | iodef-name                        | -15     |
  +-----------------------------------+---------+
  | iodef-dtype                       | -14     |
  +-----------------------------------+---------+
  | iodef-ext-dtype                   | -13     |
  +-----------------------------------+---------+
  | iodef-meaning                     | -12     |
  +-----------------------------------+---------+
  | iodef-formatid                    | -11     |
  +-----------------------------------+---------+
  | iodef-restriction                 | -10     |
  +-----------------------------------+---------+
  | iodef-ext-restriction             | -9      |
  +-----------------------------------+---------+
  | iodef-observable-id               | -8      |
  +-----------------------------------+---------+
  | iodef-SoftwareReference           | -7      |
  +-----------------------------------+---------+
  | iodef-URL                         | -6      |
  +-----------------------------------+---------+
  | iodef-Description                 | -5      |
  +-----------------------------------+---------+
  | iodef-spec-name                   | -4      |
  +-----------------------------------+---------+
  | iodef-ext-spec-name               | -3      |
  +-----------------------------------+---------+
  | iodef-purpose                     | -2      |
  +-----------------------------------+---------+
  | iodef-ext-purpose                 | -1      |
  +-----------------------------------+---------+
  | iodef-status                      | 0       |
  +-----------------------------------+---------+
  | iodef-ext-status                  | 1       |
  +-----------------------------------+---------+
  | iodef-IncidentID                  | 2       |
  +-----------------------------------+---------+
  | iodef-AlternativeID               | 3       |
  +-----------------------------------+---------+
  | iodef-RelatedActivity             | 4       |
  +-----------------------------------+---------+
  | iodef-DetectTime                  | 5       |
  +-----------------------------------+---------+
  | iodef-StartTime                   | 6       |
  +-----------------------------------+---------+
  | iodef-EndTime                     | 7       |
  +-----------------------------------+---------+
  | iodef-RecoveryTime                | 8       |
  +-----------------------------------+---------+
  | iodef-ReportTime                  | 9       |
  +-----------------------------------+---------+
  | iodef-GenerationTime              | 10      |
  +-----------------------------------+---------+
  | iodef-Discovery                   | 11      |
  +-----------------------------------+---------+
  | iodef-Assessment                  | 12      |
  +-----------------------------------+---------+
  | iodef-Method                      | 13      |
  +-----------------------------------+---------+
  | iodef-Contact                     | 14      |
  +-----------------------------------+---------+
  | iodef-EventData                   | 15      |
  +-----------------------------------+---------+
  | iodef-Indicator                   | 16      |
  +-----------------------------------+---------+
  | iodef-History                     | 17      |
  +-----------------------------------+---------+
  | iodef-id                          | 18      |
  +-----------------------------------+---------+
  | iodef-instance                    | 19      |
  +-----------------------------------+---------+
  | iodef-ThreatActor                 | 20      |
  +-----------------------------------+---------+
  | iodef-Campaign                    | 21      |
  +-----------------------------------+---------+
  | iodef-IndicatorID                 | 22      |
  +-----------------------------------+---------+
  | iodef-Confidence                  | 23      |
  +-----------------------------------+---------+
  | iodef-ThreatActorID               | 24      |
  +-----------------------------------+---------+
  | iodef-CampaignID                  | 25      |
  +-----------------------------------+---------+
  | iodef-role                        | 26      |
  +-----------------------------------+---------+
  | iodef-ext-role                    | 27      |
  +-----------------------------------+---------+
  | iodef-type                        | 28      |
  +-----------------------------------+---------+
  | iodef-ext-type                    | 29      |
  +-----------------------------------+---------+
  | iodef-ContactName                 | 30      |
  +-----------------------------------+---------+
  | iodef-ContactTitle                | 31      |
  +-----------------------------------+---------+
  | iodef-RegistryHandle              | 32      |
  +-----------------------------------+---------+
  | iodef-PostalAddress               | 33      |
  +-----------------------------------+---------+
  | iodef-Email                       | 34      |
  +-----------------------------------+---------+
  | iodef-Telephone                   | 35      |
  +-----------------------------------+---------+
  | iodef-Timezone                    | 36      |
  +-----------------------------------+---------+
  | iodef-handle                      | 37      |
  +-----------------------------------+---------+
  | iodef-registry                    | 38      |
  +-----------------------------------+---------+
  | iodef-ext-registry                | 39      |
  +-----------------------------------+---------+
  | iodef-PAddress                    | 40      |
  +-----------------------------------+---------+
  | iodef-EmailTo                     | 41      |
  +-----------------------------------+---------+
  | iodef-TelephoneNumber             | 42      |
  +-----------------------------------+---------+
  | iodef-source                      | 43      |
  +-----------------------------------+---------+
  | iodef-ext-source                  | 44      |
  +-----------------------------------+---------+
  | iodef-DetectionPattern            | 45      |
  +-----------------------------------+---------+
  | iodef-DetectionConfiguration      | 46      |
  +-----------------------------------+---------+
  | iodef-Application                 | 47      |
  +-----------------------------------+---------+
  | iodef-Reference                   | 48      |
  +-----------------------------------+---------+
  | iodef-AttackPattern               | 49      |
  +-----------------------------------+---------+
  | iodef-Vulnerability               | 50      |
  +-----------------------------------+---------+
  | iodef-Weakness                    | 51      |
  +-----------------------------------+---------+
  | iodef-SpecID                      | 52      |
  +-----------------------------------+---------+
  | iodef-ext-SpecID                  | 53      |
  +-----------------------------------+---------+
  | iodef-ContentID                   | 54      |
  +-----------------------------------+---------+
  | iodef-RawData                     | 55      |
  +-----------------------------------+---------+
  | iodef-Platform                    | 56      |
  +-----------------------------------+---------+
  | iodef-Scoring                     | 57      |
  +-----------------------------------+---------+
  | iodef-ReferenceName               | 58      |
  +-----------------------------------+---------+
  | iodef-specIndex                   | 59      |
  +-----------------------------------+---------+
  | iodef-ID                          | 60      |
  +-----------------------------------+---------+
  | iodef-occurrence                  | 61      |
  +-----------------------------------+---------+
  | iodef-IncidentCategory            | 62      |
  +-----------------------------------+---------+
  | iodef-Impact                      | 63      |
  +-----------------------------------+---------+
  | iodef-SystemImpact                | 64      |
  +-----------------------------------+---------+
  | iodef-BusinessImpact              | 65      |
  +-----------------------------------+---------+
  | iodef-TimeImpact                  | 66      |
  +-----------------------------------+---------+
  | iodef-MonetaryImpact              | 67      |
  +-----------------------------------+---------+
  | iodef-IntendedImpact              | 68      |
  +-----------------------------------+---------+
  | iodef-Counter                     | 69      |
  +-----------------------------------+---------+
  | iodef-MitigatingFactor            | 70      |
  +-----------------------------------+---------+
  | iodef-Cause                       | 71      |
  +-----------------------------------+---------+
  | iodef-severity                    | 72      |
  +-----------------------------------+---------+
  | iodef-completion                  | 73      |
  +-----------------------------------+---------+
  | iodef-ext-severity                | 74      |
  +-----------------------------------+---------+
  | iodef-metric                      | 75      |
  +-----------------------------------+---------+
  | iodef-ext-metric                  | 76      |
  +-----------------------------------+---------+
  | iodef-duration                    | 77      |
  +-----------------------------------+---------+
  | iodef-ext-duration                | 78      |
  +-----------------------------------+---------+
  | iodef-currency                    | 79      |
  +-----------------------------------+---------+
  | iodef-rating                      | 80      |
  +-----------------------------------+---------+
  | iodef-ext-rating                  | 81      |
  +-----------------------------------+---------+
  | iodef-HistoryItem                 | 82      |
  +-----------------------------------+---------+
  | iodef-action                      | 83      |
  +-----------------------------------+---------+
  | iodef-ext-action                  | 84      |
  +-----------------------------------+---------+
  | iodef-DateTime                    | 85      |
  +-----------------------------------+---------+
  | iodef-DefinedCOA                  | 86      |
  +-----------------------------------+---------+
  | iodef-System                      | 87      |
  +-----------------------------------+---------+
  | iodef-Expectation                 | 88      |
  +-----------------------------------+---------+
  | iodef-RecordData                  | 89      |
  +-----------------------------------+---------+
  | iodef-category                    | 90      |
  +-----------------------------------+---------+
  | iodef-ext-category                | 91      |
  +-----------------------------------+---------+
  | iodef-interface                   | 92      |
  +-----------------------------------+---------+
  | iodef-spoofed                     | 93      |
  +-----------------------------------+---------+
  | iodef-virtual                     | 94      |
  +-----------------------------------+---------+
  | iodef-ownership                   | 95      |
  +-----------------------------------+---------+
  | iodef-ext-ownership               | 96      |
  +-----------------------------------+---------+
  | iodef-Node                        | 97      |
  +-----------------------------------+---------+
  | iodef-NodeRole                    | 98      |
  +-----------------------------------+---------+
  | iodef-Service                     | 99      |
  +-----------------------------------+---------+
  | iodef-OperatingSystem             | 100     |
  +-----------------------------------+---------+
  | iodef-AssetID                     | 101     |
  +-----------------------------------+---------+
  | iodef-DomainData                  | 102     |
  +-----------------------------------+---------+
  | iodef-Address                     | 103     |
  +-----------------------------------+---------+
  | iodef-Location                    | 104     |
  +-----------------------------------+---------+
  | iodef-vlan-name                   | 105     |
  +-----------------------------------+---------+
  | iodef-vlan-num                    | 106     |
  +-----------------------------------+---------+
  | iodef-unit                        | 107     |
  +-----------------------------------+---------+
  | iodef-ext-unit                    | 108     |
  +-----------------------------------+---------+
  | iodef-system-status               | 109     |
  +-----------------------------------+---------+
  | iodef-ext-system-status           | 110     |
  +-----------------------------------+---------+
  | iodef-domain-status               | 111     |
  +-----------------------------------+---------+
  | iodef-ext-domain-status           | 112     |
  +-----------------------------------+---------+
  | iodef-Name                        | 113     |
  +-----------------------------------+---------+
  | iodef-DateDomainWasChecked        | 114     |
  +-----------------------------------+---------+
  | iodef-RegistrationDate            | 115     |
  +-----------------------------------+---------+
  | iodef-ExpirationDate              | 116     |
  +-----------------------------------+---------+
  | iodef-RelatedDNS                  | 117     |
  +-----------------------------------+---------+
  | iodef-NameServers                 | 118     |
  +-----------------------------------+---------+
  | iodef-DomainContacts              | 119     |
  +-----------------------------------+---------+
  | iodef-Server                      | 120     |
  +-----------------------------------+---------+
  | iodef-SameDomainContact           | 121     |
  +-----------------------------------+---------+
  | iodef-ip-protocol                 | 122     |
  +-----------------------------------+---------+
  | iodef-ServiceName                 | 123     |
  +-----------------------------------+---------+
  | iodef-Port                        | 124     |
  +-----------------------------------+---------+
  | iodef-Portlist                    | 125     |
  +-----------------------------------+---------+
  | iodef-ProtoCode                   | 126     |
  +-----------------------------------+---------+
  | iodef-ProtoType                   | 127     |
  +-----------------------------------+---------+
  | iodef-ProtoField                  | 128     |
  +-----------------------------------+---------+
  | iodef-ApplicationHeaderField      | 129     |
  +-----------------------------------+---------+
  | iodef-EmailData                   | 130     |
  +-----------------------------------+---------+
  | iodef-IANAService                 | 131     |
  +-----------------------------------+---------+
  | iodef-EmailFrom                   | 132     |
  +-----------------------------------+---------+
  | iodef-EmailSubject                | 133     |
  +-----------------------------------+---------+
  | iodef-EmailX-Mailer               | 134     |
  +-----------------------------------+---------+
  | iodef-EmailHeaderField            | 135     |
  +-----------------------------------+---------+
  | iodef-EmailHeaders                | 136     |
  +-----------------------------------+---------+
  | iodef-EmailBody                   | 137     |
  +-----------------------------------+---------+
  | iodef-EmailMessage                | 138     |
  +-----------------------------------+---------+
  | iodef-HashData                    | 139     |
  +-----------------------------------+---------+
  | iodef-Signature                   | 140     |
  +-----------------------------------+---------+
  | iodef-RecordPattern               | 141     |
  +-----------------------------------+---------+
  | iodef-RecordItem                  | 142     |
  +-----------------------------------+---------+
  | iodef-FileData                    | 143     |
  +-----------------------------------+---------+
  | iodef-WindowsRegistryKeysModified | 144     |
  +-----------------------------------+---------+
  | iodef-CertificateData             | 145     |
  +-----------------------------------+---------+
  | iodef-offset                      | 146     |
  +-----------------------------------+---------+
  | iodef-offsetunit                  | 147     |
  +-----------------------------------+---------+
  | iodef-ext-offsetunit              | 148     |
  +-----------------------------------+---------+
  | iodef-Key                         | 149     |
  +-----------------------------------+---------+
  | iodef-registryaction              | 150     |
  +-----------------------------------+---------+
  | iodef-ext-registryaction          | 151     |
  +-----------------------------------+---------+
  | iodef-KeyName                     | 152     |
  +-----------------------------------+---------+
  | iodef-KeyValue                    | 153     |
  +-----------------------------------+---------+
  | iodef-Certificate                 | 154     |
  +-----------------------------------+---------+
  | iodef-X509Data                    | 155     |
  +-----------------------------------+---------+
  | iodef-File                        | 156     |
  +-----------------------------------+---------+
  | iodef-FileName                    | 157     |
  +-----------------------------------+---------+
  | iodef-FileSize                    | 158     |
  +-----------------------------------+---------+
  | iodef-FileType                    | 159     |
  +-----------------------------------+---------+
  | iodef-AssociatedSoftware          | 160     |
  +-----------------------------------+---------+
  | iodef-FileProperties              | 161     |
  +-----------------------------------+---------+
  | iodef-scope                       | 162     |
  +-----------------------------------+---------+
  | iodef-HashTargetID                | 163     |
  +-----------------------------------+---------+
  | iodef-Hash                        | 164     |
  +-----------------------------------+---------+
  | iodef-FuzzyHash                   | 165     |
  +-----------------------------------+---------+
  | iodef-DigestMethod                | 166     |
  +-----------------------------------+---------+
  | iodef-DigestValue                 | 167     |
  +-----------------------------------+---------+
  | iodef-CanonicalizationMethod      | 168     |
  +-----------------------------------+---------+
  | iodef-FuzzyHashValue              | 169     |
  +-----------------------------------+---------+
  | iodef-AlternativeIndicatorID      | 170     |
  +-----------------------------------+---------+
  | iodef-Observable                  | 171     |
  +-----------------------------------+---------+
  | iodef-uid-ref                     | 172     |
  +-----------------------------------+---------+
  | iodef-IndicatorExpression         | 173     |
  +-----------------------------------+---------+
  | iodef-IndicatorReference          | 174     |
  +-----------------------------------+---------+
  | iodef-AttackPhase                 | 175     |
  +-----------------------------------+---------+
  | iodef-BulkObservable              | 176     |
  +-----------------------------------+---------+
  | iodef-BulkObservableFormat        | 177     |
  +-----------------------------------+---------+
  | iodef-BulkObservableList          | 178     |
  +-----------------------------------+---------+
  | iodef-operator                    | 179     |
  +-----------------------------------+---------+
  | iodef-ext-operator                | 180     |
  +-----------------------------------+---------+
  | iodef-euid-ref                    | 181     |
  +-----------------------------------+---------+
  | iodef-AttackPhaseID               | 182     |
  +-----------------------------------+---------+

                  Table 4: Mapkeys

6.  The IODEF Data Model (CDDL)

  This section provides the IODEF data model.  Note that mapkeys are
  described at the beginning of the CDDL data model for better
  readability.

  start = iodef

  ;;; iodef.json: IODEF-Document

  iodef-version = -24
  iodef-lang = -23
  iodef-format-id = -22
  iodef-private-enum-name = -21
  iodef-private-enum-id = -20
  iodef-Incident = -19
  iodef-AdditionalData = -18
  iodef-value = -17
  iodef-translation-id = -16
  iodef-name = -15
  iodef-dtype = -14
  iodef-ext-dtype = -13
  iodef-meaning = -12
  iodef-formatid = -11
  iodef-restriction = -10
  iodef-ext-restriction = -9
  iodef-observable-id = -8
  iodef-SoftwareReference = -7
  iodef-URL = -6
  iodef-Description = -5
  iodef-spec-name = -4
  iodef-ext-spec-name = -3
  iodef-purpose = -2
  iodef-ext-purpose = -1
  iodef-status = 0
  iodef-ext-status = 1
  iodef-IncidentID = 2
  iodef-AlternativeID = 3
  iodef-RelatedActivity = 4
  iodef-DetectTime = 5
  iodef-StartTime = 6
  iodef-EndTime = 7
  iodef-RecoveryTime = 8
  iodef-ReportTime = 9
  iodef-GenerationTime = 10
  iodef-Discovery = 11
  iodef-Assessment = 12
  iodef-Method = 13
  iodef-Contact = 14
  iodef-EventData = 15
  iodef-Indicator = 16
  iodef-History = 17
  iodef-id = 18
  iodef-instance = 19
  iodef-ThreatActor = 20
  iodef-Campaign = 21
  iodef-IndicatorID = 22
  iodef-Confidence = 23
  iodef-ThreatActorID = 24
  iodef-CampaignID = 25
  iodef-role = 26
  iodef-ext-role = 27
  iodef-type = 28
  iodef-ext-type = 29
  iodef-ContactName = 30
  iodef-ContactTitle = 31
  iodef-RegistryHandle = 32
  iodef-PostalAddress = 33
  iodef-Email = 34
  iodef-Telephone = 35
  iodef-Timezone = 36
  iodef-handle = 37
  iodef-registry = 38
  iodef-ext-registry = 39
  iodef-PAddress = 40
  iodef-EmailTo = 41
  iodef-TelephoneNumber = 42
  iodef-source = 43
  iodef-ext-source = 44
  iodef-DetectionPattern = 45
  iodef-DetectionConfiguration = 46
  iodef-Application = 47
  iodef-Reference = 48
  iodef-AttackPattern = 49
  iodef-Vulnerability = 50
  iodef-Weakness = 51
  iodef-SpecID = 52
  iodef-ext-SpecID = 53
  iodef-ContentID = 54
  iodef-RawData = 55
  iodef-Platform = 56
  iodef-Scoring = 57
  iodef-ReferenceName = 58
  iodef-specIndex = 59
  iodef-ID = 60
  iodef-occurrence = 61
  iodef-IncidentCategory = 62
  iodef-Impact = 63
  iodef-SystemImpact = 64
  iodef-BusinessImpact = 65
  iodef-TimeImpact = 66
  iodef-MonetaryImpact = 67
  iodef-IntendedImpact = 68
  iodef-Counter = 69
  iodef-MitigatingFactor = 70
  iodef-Cause = 71
  iodef-severity = 72
  iodef-completion = 73
  iodef-ext-severity = 74
  iodef-metric = 75
  iodef-ext-metric = 76
  iodef-duration = 77
  iodef-ext-duration = 78
  iodef-currency = 79
  iodef-rating = 80
  iodef-ext-rating = 81
  iodef-HistoryItem = 82
  iodef-action = 83
  iodef-ext-action = 84
  iodef-DateTime = 85
  iodef-DefinedCOA = 86
  iodef-System = 87
  iodef-Expectation = 88
  iodef-RecordData = 89
  iodef-category = 90
  iodef-ext-category = 91
  iodef-interface = 92
  iodef-spoofed = 93
  iodef-virtual = 94
  iodef-ownership = 95
  iodef-ext-ownership = 96
  iodef-Node = 97
  iodef-NodeRole = 98
  iodef-Service = 99
  iodef-OperatingSystem = 100
  iodef-AssetID = 101
  iodef-DomainData = 102
  iodef-Address = 103
  iodef-Location = 104
  iodef-vlan-name = 105
  iodef-vlan-num = 106
  iodef-unit = 107
  iodef-ext-unit = 108
  iodef-system-status = 109
  iodef-ext-system-status = 110
  iodef-domain-status = 111
  iodef-ext-domain-status = 112
  iodef-Name = 113
  iodef-DateDomainWasChecked = 114
  iodef-RegistrationDate = 115
  iodef-ExpirationDate = 116
  iodef-RelatedDNS = 117
  iodef-NameServers = 118
  iodef-DomainContacts = 119
  iodef-Server = 120
  iodef-SameDomainContact = 121
  iodef-ip-protocol = 122
  iodef-ServiceName = 123
  iodef-Port = 124
  iodef-Portlist = 125
  iodef-ProtoCode = 126
  iodef-ProtoType = 127
  iodef-ProtoField = 128
  iodef-ApplicationHeaderField = 129
  iodef-EmailData = 130
  iodef-IANAService = 131
  iodef-EmailFrom = 132
  iodef-EmailSubject = 133
  iodef-EmailX-Mailer = 134
  iodef-EmailHeaderField = 135
  iodef-EmailHeaders = 136
  iodef-EmailBody = 137
  iodef-EmailMessage = 138
  iodef-HashData = 139
  iodef-Signature = 140
  iodef-RecordPattern = 141
  iodef-RecordItem = 142
  iodef-FileData = 143
  iodef-WindowsRegistryKeysModified = 144
  iodef-CertificateData = 145
  iodef-offset = 146
  iodef-offsetunit = 147
  iodef-ext-offsetunit = 148
  iodef-Key = 149
  iodef-registryaction = 150
  iodef-ext-registryaction = 151
  iodef-KeyName = 152
  iodef-KeyValue = 153
  iodef-Certificate = 154
  iodef-X509Data = 155
  iodef-File = 156
  iodef-FileName = 157
  iodef-FileSize = 158
  iodef-FileType = 159
  iodef-AssociatedSoftware = 160
  iodef-FileProperties = 161
  iodef-scope = 162
  iodef-HashTargetID = 163
  iodef-Hash = 164
  iodef-FuzzyHash = 165
  iodef-DigestMethod = 166
  iodef-DigestValue = 167
  iodef-CanonicalizationMethod = 168
  iodef-FuzzyHashValue = 169
  iodef-AlternativeIndicatorID = 170
  iodef-Observable = 171
  iodef-uid-ref = 172
  iodef-IndicatorExpression = 173
  iodef-IndicatorReference = 174
  iodef-AttackPhase = 175
  iodef-BulkObservable = 176
  iodef-BulkObservableFormat = 177
  iodef-BulkObservableList = 178
  iodef-operator = 179
  iodef-ext-operator = 180
  iodef-euid-ref = 181
  iodef-AttackPhaseID = 182

  iodef = {
   iodef-version => text,
   ? iodef-lang => lang,
   ? iodef-format-id => text
   ? iodef-private-enum-name => text,
   ? iodef-private-enum-id => text,
   iodef-Incident => [+ Incident],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  duration = "second" / "minute" / "hour" / "day" / "month" /
  "quarter" / "year" / "ext-value"
  lang = "" / text .regexp "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"

  restriction = "public" / "partner" / "need-to-know" / "private" /
  "default" / "white" / "green" / "amber" / "red" /
  "ext-value"
  SpecID = "urn:ietf:params:xml:ns:mile:mmdef:1.2" /  "private"
  IDtype = text .regexp "[a-zA-Z_][a-zA-Z0-9_.-]*"
  IDREFType = IDtype
  URLtype = uri
  TimeZonetype = text .regexp "Z|[\\+\\-](0[0-9]|1[0-4]):[0-5][0-9]"
  PortlistType = text .regexp
                          "[0-9]+(\\-[0-9]+)?(,[0-9]+(\\-[0-9]+)?)*"
  action = "nothing" / "contact-source-site" / "contact-target-site" /
  "contact-sender" / "investigate" / "block-host" /
  "block-network" / "block-port" / "rate-limit-host" /
  "rate-limit-network" / "rate-limit-port" / "redirect-traffic" /
  "honeypot" / "upgrade-software" / "rebuild-asset" /
  "harden-asset" / "remediate-other" / "status-triage" /
  "status-new-info" / "watch-and-report" / "training" /
  "defined-coa" / "other" / "ext-value"

  DATETIME = tdate

  BYTE = eb64legacy

  MLStringType = {
      iodef-value => text,
      ? iodef-lang => lang,
      ? iodef-translation-id => text
  } / text

  PositiveFloatType = float32 .gt 0

  PAddressType = MLStringType

  ExtensionType  = {
   iodef-value => text,
   ? iodef-name => text,
   iodef-dtype => "boolean" / "byte" / "bytes" / "character" /
  "date-time" / "ntpstamp" / "integer" / "portlist" / "real" /
  "string" / "file" / "path" / "frame" / "packet" / "ipv4-packet" /
  "json" / "ipv6-packet" / "url" / "csv" / "winreg" / "xml" /
  "ext-value"
  .default "string"
   ? iodef-ext-dtype => text,
   ? iodef-meaning => text,
   ? iodef-formatid => text,
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
  }

  SoftwareType = {
   ? iodef-SoftwareReference => SoftwareReference,
   ? iodef-URL => [+ URLtype],
   ? iodef-Description => [+ MLStringType]
  }

  SoftwareReference = {
   ? iodef-value => text,
   iodef-spec-name => "custom" / "cpe" / "swid" / "ext-value",
   ? iodef-ext-spec-name => text,
   ? iodef-dtype => "bytes" / "integer" / "real" / "string" / "xml" /
  "ext-value" .default "string",
   ? iodef-ext-dtype => text
  }

  Incident = {
   iodef-purpose => "traceback" / "mitigation" / "reporting" /
  "watch" / "other" / "ext-value",
   ? iodef-ext-purpose => text,
   ? iodef-status => "new" / "in-progress"/ "forwarded" / "resolved" /
  "future" / "ext-value",
   ? iodef-ext-status => text,
   ? iodef-lang => lang,
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   iodef-IncidentID => IncidentID,
   ? iodef-AlternativeID => AlternativeID,
   ? iodef-RelatedActivity => [+ RelatedActivity],
   ? iodef-DetectTime => DATETIME,
   ? iodef-StartTime => DATETIME,
   ? iodef-EndTime => DATETIME,
   ? iodef-RecoveryTime => DATETIME,
   ? iodef-ReportTime => DATETIME,
   iodef-GenerationTime => DATETIME,
   ? iodef-Description => [+ MLStringType],
   ? iodef-Discovery => [+ Discovery],
   ? iodef-Assessment => [+ Assessment],
   ? iodef-Method => [+ Method],
   iodef-Contact => [+ Contact],
   ? iodef-EventData => [+ EventData],
   ? iodef-Indicator => [+ Indicator],
   ? iodef-History => History,
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  IncidentID = {
   iodef-id => text,
   iodef-name => text,
   ? iodef-instance => text,
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text
  }

  AlternativeID = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   iodef-IncidentID => [+ IncidentID]
  }

  RelatedActivity = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-IncidentID => [+ IncidentID],
   ? iodef-URL => [+ URLtype],
   ? iodef-ThreatActor => [+ ThreatActor],
   ? iodef-Campaign => [+ Campaign],
   ? iodef-IndicatorID => [+ IndicatorID],
   ? iodef-Confidence => Confidence,
   ? iodef-Description => [+ text],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  ThreatActor = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-ThreatActorID => [+ text],
   ? iodef-URL => [+ URLtype],
   ? iodef-Description => [+ MLStringType],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  Campaign  = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-CampaignID => [+ text],
   ? iodef-URL => [+ URLtype],
   ? iodef-Description => [+ MLStringType],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  Contact = {
   iodef-role => "creator" / "reporter" / "admin" / "tech" /
  "provider" / "user" / "billing" / "legal" / "irt" / "abuse" /
  "cc" / "cc-irt" / "leo" / "vendor" / "vendor-support" /
  "victim" / "victim-notified" / "ext-value",
   ? iodef-ext-role => text,
   iodef-type => "person" / "organization" / "ext-value",
   ? iodef-ext-type => text,
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-ContactName => [+ MLStringType],
   ? iodef-ContactTitle => [+ MLStringType],
   ? iodef-Description => [+ MLStringType],
   ? iodef-RegistryHandle => [+ RegistryHandle],
   ? iodef-PostalAddress => [+ PostalAddress],
   ? iodef-Email => [+ Email],
   ? iodef-Telephone => [+ Telephone],
   ? iodef-Timezone => TimeZonetype,
   ? iodef-Contact => [+ Contact],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  RegistryHandle = {
   iodef-handle => text,
   iodef-registry => "internic" / "apnic" / "arin" / "lacnic" /
  "ripe" / "afrinic" / "local" / "ext-value",
   ? iodef-ext-registry => text
  }

  PostalAddress = {
   ? iodef-type => "street" / "mailing" / "ext-value",
   ? iodef-ext-type => text,
   iodef-PAddress => PAddressType,
   ? iodef-Description => [+ MLStringType]
  }

  Email = {
   ? iodef-type => "direct" / "hotline" / "ext-value",
   ? iodef-ext-type => text,
   iodef-EmailTo => text,
   ? iodef-Description => [+ MLStringType]
  }

  Telephone = {
   ? iodef-type => "wired" / "mobile" / "fax" / "hotline" /
   "ext-value",
   ? iodef-ext-type => text,
   iodef-TelephoneNumber => text,
   ? iodef-Description => [+ MLStringType]
  }

  Discovery = {
   ? iodef-source => "nidps" / "hips" / "siem" / "av" /
  "third-party-monitoring" / "incident" / "os-log" /
  "application-log" / "device-log" / "network-flow" /
  "passive-dns" / "investigation" / "audit" /
  "internal-notification" / "external-notification" /
  "leo" / "partner" / "actor" / "unknown" / "ext-value",
   ? iodef-ext-source => text,
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-Description => [+ MLStringType],
   ? iodef-Contact => [+ Contact],
   ? iodef-DetectionPattern => [+ DetectionPattern]
  }

  DetectionPattern = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   (iodef-Description => [+ MLStringType] //
                 iodef-DetectionConfiguration => [+ text]),
   iodef-Application => SoftwareType
  }

  Method = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-Reference => [+ Reference],
   ? iodef-Description => [+ MLStringType],
   ? iodef-AttackPattern => [+ STRUCTUREDINFO],
   ? iodef-Vulnerability => [+ STRUCTUREDINFO],
   ? iodef-Weakness => [+ STRUCTUREDINFO],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  STRUCTUREDINFO = {
   iodef-SpecID => SpecID,
   ? iodef-ext-SpecID => text,
   ? iodef-ContentID => text,
   ? (iodef-RawData => [+ BYTE] // iodef-Reference => [+ Reference]),
   ? iodef-Platform => [+ Platform],
   ? iodef-Scoring => [+ Scoring]
  }

  Platform = {
      iodef-SpecID => SpecID,
      ? iodef-ext-SpecID => text,
      ? iodef-ContentID => text,
      ? iodef-RawData => [+ BYTE],
      ? iodef-Reference => [+ Reference]
  }
  Scoring = {
      iodef-SpecID => SpecID,
      ? iodef-ext-SpecID => text,
      ? iodef-ContentID => text,
      ? iodef-RawData => [+ BYTE],
      ? iodef-Reference => [+ Reference]
  }
  Reference = {
   ? iodef-observable-id => IDtype,
   ? iodef-ReferenceName => ReferenceName,
   ? iodef-URL => [+ URLtype],
   ? iodef-Description => [+ MLStringType]
  }

  ReferenceName = {
   iodef-specIndex => integer,
   iodef-ID => IDtype
  }

  Assessment = {
   ? iodef-occurrence => "actual" / "potential",
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   ? iodef-IncidentCategory => [+ MLStringType],
   iodef-Impact => [+ {iodef-SystemImpact => SystemImpact} /
            {iodef-BusinessImpact => BusinessImpact /
            {iodef-TimeImpact => TimeImpact} /
            {iodef-MonetaryImpact => MonetaryImpact} /
            {iodef-IntendedImpact => BusinessImpact}],
   ? iodef-Counter => [+ Counter],
   ? iodef-MitigatingFactor => [+ MLStringType],
   ? iodef-Cause => [+ MLStringType],
   ? iodef-Confidence => Confidence,
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  SystemImpact = {
   ? iodef-severity => "low" / "medium" / "high",
   ? iodef-completion => "failed" / "succeeded",
   iodef-type => "takeover-account" / "takeover-service" /
  "takeover-system" / "cps-manipulation" / "cps-damage" /
  "availability-data" / "availability-account" /
  "availability-service" / "availability-system" / "damaged-system" /
  "damaged-data" / "breach-proprietary" / "breach-privacy" /
  "breach-credential" / "breach-configuration" / "integrity-data" /
  "integrity-configuration" / "integrity-hardware" /
  "traffic-redirection" / "monitoring-traffic" / "monitoring-host" /
  "policy" / "unknown" / "ext-value" .default "unknown",
   ? iodef-ext-type => text,
   ? iodef-Description => [+ MLStringType]
  }

  BusinessImpact = {
  ? iodef-severity => "none" / "low" / "medium" / "high" / "unknown" /
  "ext-value" .default "unknown",
   ? iodef-ext-severity => text,
   iodef-type => "breach-proprietary" / "breach-privacy" /
  "breach-credential" / "loss-of-integrity" / "loss-of-service" /
  "theft-financial" / "theft-service" / "degraded-reputation" /
  "asset-damage" / "asset-manipulation" / "legal" / "extortion" /
  "unknown" / "ext-value" .default "unknown",
   ? iodef-ext-type => text,
   ? iodef-Description => [+ MLStringType]
  }

  TimeImpact = {
   iodef-value => PositiveFloatType,
   ? iodef-severity => "low" / "medium" / "high",
   iodef-metric => "labor" / "elapsed" / "downtime" / "ext-value",
   ? iodef-ext-metric => text,
   ? iodef-duration => duration .default "hour",
   ? iodef-ext-duration => text
  }

  MonetaryImpact = {
   iodef-value => PositiveFloatType,
   ? iodef-severity => "low" / "medium" / "high",
   ? iodef-currency => text
  }

  Confidence = {
   iodef-value => float32,
   iodef-rating => "low" / "medium" / "high" / "numeric" / "unknown" /
  "ext-value",
   ? iodef-ext-rating => text
  }

  History = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   iodef-HistoryItem => [+ HistoryItem]
  }

  HistoryItem = {
   iodef-action => action .default "other",
   ? iodef-ext-action => text,
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   iodef-DateTime => DATETIME,
   ? iodef-IncidentID => IncidentID,
   ? iodef-Contact => Contact,
   ? iodef-Description => [+ MLStringType],
   ? iodef-DefinedCOA => [+ text],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  EventData = {
   ? iodef-restriction => restriction .default "default",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   ? iodef-Description => [+ MLStringType],
   ? iodef-DetectTime => DATETIME,
   ? iodef-StartTime => DATETIME,
   ? iodef-EndTime => DATETIME,
   ? iodef-RecoveryTime => DATETIME,
   ? iodef-ReportTime => DATETIME,
   ? iodef-Contact => [+ Contact],
   ? iodef-Discovery => [+ Discovery],
   ? iodef-Assessment => Assessment,
   ? iodef-Method => [+ Method],
   ? iodef-System => [+ System],
   ? iodef-Expectation => [+ Expectation],
   ? iodef-RecordData => [+ RecordData],
   ? iodef-EventData => [+ EventData],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  Expectation = {
   ? iodef-action => action .default "other",
   ? iodef-ext-action => text,
   ? iodef-severity => "low" / "medium" / "high",
   ? iodef-restriction => restriction .default "default",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   ? iodef-Description => [+ MLStringType],
   ? iodef-DefinedCOA => [+ text],
   ? iodef-StartTime => DATETIME,
   ? iodef-EndTime => DATETIME,
   ? iodef-Contact => Contact
  }

  System = {
   ? iodef-category => "source" / "target" / "intermediate" /
  "sensor" / "infrastructure" / "ext-value",
   ? iodef-ext-category => text,
   ? iodef-interface => text,
   ? iodef-spoofed => "unknown" / "yes" / "no" .default "unknown",
   ? iodef-virtual => "yes" / "no" / "unknown" .default "unknown",
   ? iodef-ownership => "organization" / "personal" / "partner" /
  "customer" / "no-relationship" / "unknown" / "ext-value",
   ? iodef-ext-ownership => text,
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   iodef-Node => Node,
   ? iodef-NodeRole => [+ NodeRole],
   ? iodef-Service => [+ Service],
   ? iodef-OperatingSystem => [+ SoftwareType],
   ? iodef-Counter => [+ Counter],
   ? iodef-AssetID => [+ text],
   ? iodef-Description => [+ MLStringType],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  Node = {
   (iodef-DomainData => [+ DomainData] //
                                 iodef-Address => [+ Address]),
   ? iodef-PostalAddress => PostalAddress,
   ? iodef-Location => [+ MLStringType],
   ? iodef-Counter => [+ Counter]
  }

  Address = {
   iodef-value => text,
   iodef-category => "asn" / "atm" / "e-mail" / "ipv4-addr" /
  "ipv4-net" / "ipv4-net-masked" / "ipv4-net-mask" / "ipv6-addr" /
  "ipv6-net" / "ipv6-net-masked" / "mac" / "site-uri" /
  "ext-value" .default "ipv6-addr",
   ? iodef-ext-category => text,
   ? iodef-vlan-name => text,
   ? iodef-vlan-num => integer,
   ? iodef-observable-id => IDtype
  }

  NodeRole = {
   iodef-category => "client" / "client-enterprise" /
  "client-partner" / "client-remote" / "client-kiosk" /
  "client-mobile" / "server-internal" / "server-public" /
  "www" / "mail" / "webmail" / "messaging" / "streaming" /
  "voice" / "file" / "ftp" / "p2p" / "name" / "directory" /
  "credential" / "print" / "application" / "database" /
  "backup" / "dhcp" / "assessment" / "source-control" /
  "config-management" / "monitoring" / "infra" / "infra-firewall" /
  "infra-router" / "infra-switch" / "camera" / "proxy" /
  "remote-access" / "log" / "virtualization" / "pos" /  "scada" /
  "scada-supervisory" / "sinkhole" / "honeypot" /
  "anomyzation" / "c2-server" / "malware-distribution" /
  "drop-server" / "hop-point" / "reflector" /
  "phishing-site" / "spear-phishing-site" / "recruiting-site" /
  "fraudulent-site" / "ext-value",
   ? iodef-ext-category => text,
   ? iodef-Description => [+ MLStringType]
  }

  Counter = {
   iodef-value => float32,
   iodef-type => "count" / "peak" / "average" / "ext-value",
   ? iodef-ext-type => text,
   iodef-unit => "byte" / "mbit" / "packet" / "flow" / "session" /
  "alert" / "message" / "event" / "host" / "site" / "organization" /
  "ext-value",
   ? iodef-ext-unit => text,
   ? iodef-meaning => text,
   ? iodef-duration => duration .default "hour",
   ? iodef-ext-duration => text
  }

  DomainData = {
   iodef-system-status => "spoofed" / "fraudulent" /
  "innocent-hacked" / "innocent-hijacked" / "unknown" / "ext-value",
   ? iodef-ext-system-status => text,
   iodef-domain-status => "reservedDelegation" / "assignedAndActive" /
  "assignedAndInactive" / "assignedAndOnHold" /
  "revoked" / "transferPending" / "registryLock" /
  "registrarLock" / "other" / "unknown" / "ext-value",
   ? iodef-ext-domain-status => text,
   ? iodef-observable-id => IDtype,
   iodef-Name => text,
   ? iodef-DateDomainWasChecked => DATETIME,
   ? iodef-RegistrationDate => DATETIME,
   ? iodef-ExpirationDate => DATETIME,
   ? iodef-RelatedDNS => [+ ExtensionType],
   ? iodef-NameServers => [+ NameServers],
   ? iodef-DomainContacts => DomainContacts
  }

  NameServers = {
   iodef-Server => text,
   iodef-Address => [+ Address]
  }

  DomainContacts = {
   (iodef-SameDomainContact => text // iodef-Contact => [+ Contact])
  }

  Service = {
   ? iodef-ip-protocol => integer,
   ? iodef-observable-id => IDtype,
   ? iodef-ServiceName => ServiceName,
   ? iodef-Port => integer,
   ? iodef-Portlist => PortlistType,
   ? iodef-ProtoCode => integer,
   ? iodef-ProtoType => integer,
   ? iodef-ProtoField => integer,
   ? iodef-ApplicationHeaderField => [+ ExtensionType],
   ? iodef-EmailData => EmailData,
   ? iodef-Application => SoftwareType
  }

  ServiceName = {
   ? iodef-IANAService => text,
   ? iodef-URL => [+ URLtype],
   ? iodef-Description => [+ MLStringType]
  }

  EmailData = {
   ? iodef-observable-id => IDtype,
   ? iodef-EmailTo => [+ text],
   ? iodef-EmailFrom => text,
   ? iodef-EmailSubject => text,
   ? iodef-EmailX-Mailer => text,
   ? iodef-EmailHeaderField => [+ ExtensionType],
   ? iodef-EmailHeaders => text,
   ? iodef-EmailBody => text,
   ? iodef-EmailMessage => text,
   ? iodef-HashData => [+ HashData],
   ? iodef-Signature => [+ BYTE]
  }

  RecordData = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   ? iodef-DateTime => DATETIME,
   ? iodef-Description => [+ MLStringType],
   ? iodef-Application => SoftwareType,
   ? iodef-RecordPattern => [+ RecordPattern],
   ? iodef-RecordItem => [+ ExtensionType],
   ? iodef-URL => [+ URLtype],
   ? iodef-FileData => [+ FileData],
   ? iodef-WindowsRegistryKeysModified =>
                                  [+ WindowsRegistryKeysModified],
   ? iodef-CertificateData => [+ CertificateData],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  RecordPattern = {
   iodef-value => text,
   iodef-type => "regex" / "binary" / "xpath" /
  "ext-value"  .default "regex",
   ? iodef-ext-type => text,
   ? iodef-offset => integer,
   ? iodef-offsetunit => "line" / "byte" /
  "ext-value" .default "line",
   ? iodef-ext-offsetunit => text,
   ? iodef-instance => integer
  }

  WindowsRegistryKeysModified = {
   ? iodef-observable-id => IDtype,
   iodef-Key => [+ Key]
  }

  Key = {
   ? iodef-registryaction => "add-key" / "add-value" / "delete-key" /
  "delete-value" / "modify-key" / "modify-value" /
  "ext-value",
   ? iodef-ext-registryaction => text,
   ? iodef-observable-id => IDtype,
   iodef-KeyName => text,
   ? iodef-KeyValue => text
  }

  CertificateData = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   iodef-Certificate => [+ Certificate]
  }

  Certificate = {
   ? iodef-observable-id => IDtype,
   iodef-X509Data => BYTE,
   ? iodef-Description => [+ MLStringType]
  }

  FileData = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? iodef-observable-id => IDtype,
   iodef-File => [+ File]
  }

  File = {
   ? iodef-observable-id => IDtype,
   ? iodef-FileName => text,
   ? iodef-FileSize => integer,
   ? iodef-FileType => text,
   ? iodef-URL => [+ URLtype],
   ? iodef-HashData => HashData,
   ? iodef-Signature => [+ BYTE],
   ? iodef-AssociatedSoftware => SoftwareType,
   ? iodef-FileProperties => [+ ExtensionType]
  }

  HashData = {
   iodef-scope => "file-contents" / "file-pe-section" /
  "file-pe-iat" / "file-pe-resource" / "file-pdf-object" /
  "email-hash" / "email-headers-hash" / "email-body-hash" /
  "ext-value",
   ? iodef-HashTargetID => text,
   ? iodef-Hash => [+ Hash],
   ? iodef-FuzzyHash => [+ FuzzyHash]
  }

  Hash = {
   iodef-DigestMethod => BYTE,
   iodef-DigestValue => BYTE,
   ? iodef-CanonicalizationMethod => BYTE,
   ? iodef-Application => SoftwareType
  }

  FuzzyHash = {
   iodef-FuzzyHashValue => [+ ExtensionType],
   ? iodef-Application => SoftwareType,
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  Indicator = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   iodef-IndicatorID => IndicatorID,
   ? iodef-AlternativeIndicatorID => [+ AlternativeIndicatorID],
   ? iodef-Description => [+ MLStringType],
   ? iodef-StartTime => DATETIME,
   ? iodef-EndTime => DATETIME,
   ? iodef-Confidence => Confidence,
   ? iodef-Contact => [+ Contact],
   (iodef-Observable => Observable // iodef-uid-ref => IDREFType //
    iodef-IndicatorExpression => IndicatorExpression //
    iodef-IndicatorReference => IndicatorReference),
   ? iodef-NodeRole => [+ NodeRole],
   ? iodef-AttackPhase => [+ AttackPhase],
   ? iodef-Reference => [+ Reference],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  IndicatorID = {
   iodef-id => IDtype,
   iodef-name => text,
   iodef-version => text
  }

  AlternativeIndicatorID = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   iodef-IndicatorID => [+ IndicatorID]
  }

  Observable = {
   ? iodef-restriction => restriction .default "private",
   ? iodef-ext-restriction => text,
   ? (iodef-System => System // iodef-Address => Address //
      iodef-DomainData => DomainData //
      iodef-EmailData => EmailData //
      iodef-Service => Service //
      iodef-WindowsRegistryKeysModified =>
                                    WindowsRegistryKeysModified //
      iodef-FileData => FileData //iodef-CertificateData =>
                                                CertificateData //
      iodef-RegistryHandle =>RegistryHandle// iodef-RecordData =>
                                                    RecordData //
      iodef-EventData => EventData // iodef-Incident => Incident //
      iodef-Expectation => Expectation // iodef-Reference =>
                                                      Reference //
      iodef-Assessment => Assessment //
      iodef-DetectionPattern => DetectionPattern //
      iodef-HistoryItem => HistoryItem //
      iodef-BulkObservable => BulkObservable //
      iodef-AdditionalData => [+ ExtensionType])
  }

  BulkObservable = {
   ? iodef-type => "asn" / "atm" / "e-mail" / "ipv4-addr" /
  "ipv4-net" / "ipv4-net-mask" / "ipv6-addr" / "ipv6-net" /
  "ipv6-net-mask" / "mac" / "site-uri" / "domain-name" /
  "domain-to-ipv4" / "domain-to-ipv6" /
  "domain-to-ipv4-timestamp" / "domain-to-ipv6-timestamp" /
  "ipv4-port" / "ipv6-port" / "windows-reg-key" / "file-hash" /
  "email-x-mailer" / "email-subject" / "http-user-agent" /
  "http-request-uri" / "mutex" / "file-path" / "user-name" /
  "ext-value",
   ? iodef-ext-type => text,
   ? iodef-BulkObservableFormat => BulkObservableFormat,
   iodef-BulkObservableList => text,
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  BulkObservableFormat = {
   (iodef-Hash => Hash // iodef-AdditionalData => [+ ExtensionType])
  }

  IndicatorExpression = {
   ? iodef-operator => "not" / "and" / "or" / "xor" .default "and",
   ? iodef-ext-operator => text,
   ? iodef-IndicatorExpression => [+ IndicatorExpression],
   ? iodef-Observable => [+ Observable],
   ? iodef-uid-ref => [+ IDREFType],
   ? iodef-IndicatorReference => [+ IndicatorReference],
   ? iodef-Confidence => Confidence,
   ? iodef-AdditionalData => [+ ExtensionType]
  }

  IndicatorReference = {
   (iodef-uid-ref => IDREFType // iodef-euid-ref => text),
   ? iodef-version => text
  }

  AttackPhase = {
   ? iodef-AttackPhaseID => [+ text],
   ? iodef-URL => [+ URLtype],
   ? iodef-Description => [+ MLStringType],
   ? iodef-AdditionalData => [+ ExtensionType]
  }

                       Figure 5: Data Model in CDDL

7.  IANA Considerations

  This document has no IANA actions.

8.  Security Considerations

  This document provides a mapping from XML IODEF defined in [RFC7970]
  to JSON, and Section 3.2 describes several issues that arise when
  converting XML IODEF and JSON IODEF.  Though it does not provide any
  further security considerations other than the one described in
  [RFC7970], implementers of this document should be aware of those
  issues to avoid any unintended outcome.

9.  References

9.1.  Normative References

  [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119,
             DOI 10.17487/RFC2119, March 1997,
             <https://www.rfc-editor.org/info/rfc2119>.

  [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
             Resource Identifier (URI): Generic Syntax", STD 66,
             RFC 3986, DOI 10.17487/RFC3986, January 2005,
             <https://www.rfc-editor.org/info/rfc3986>.

  [RFC4648]  Josefsson, S., "The Base16, Base32, and Base64 Data
             Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
             <https://www.rfc-editor.org/info/rfc4648>.

  [RFC7049]  Bormann, C. and P. Hoffman, "Concise Binary Object
             Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049,
             October 2013, <https://www.rfc-editor.org/info/rfc7049>.

  [RFC7203]  Takahashi, T., Landfield, K., and Y. Kadobayashi, "An
             Incident Object Description Exchange Format (IODEF)
             Extension for Structured Cybersecurity Information",
             RFC 7203, DOI 10.17487/RFC7203, April 2014,
             <https://www.rfc-editor.org/info/rfc7203>.

  [RFC7970]  Danyliw, R., "The Incident Object Description Exchange
             Format Version 2", RFC 7970, DOI 10.17487/RFC7970,
             November 2016, <https://www.rfc-editor.org/info/rfc7970>.

  [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
             2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
             May 2017, <https://www.rfc-editor.org/info/rfc8174>.

  [RFC8259]  Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
             Interchange Format", STD 90, RFC 8259,
             DOI 10.17487/RFC8259, December 2017,
             <https://www.rfc-editor.org/info/rfc8259>.

  [RFC8610]  Birkholz, H., Vigano, C., and C. Bormann, "Concise Data
             Definition Language (CDDL): A Notational Convention to
             Express Concise Binary Object Representation (CBOR) and
             JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610,
             June 2019, <https://www.rfc-editor.org/info/rfc8610>.

9.2.  Informative References

  [JSON-SCHEMA]
             Wright, A., Andrews, H., and B. Hutton, "JSON Schema
             Validation: A Vocabulary for Structural Validation of
             JSON", Work in Progress, Internet-Draft, draft-handrews-
             json-schema-validation-02, 17 September 2019,
             <https://tools.ietf.org/html/draft-handrews-json-schema-
             validation-02>.

Appendix A.  Data Types Used in This Document

  The CDDL prelude used in this document is mapped to JSON as shown in
  the table below.

  +==============+=========+==========+=============================+
  | CDDL Prelude | Use of  | Instance | Validation                  |
  |              | JSON    |          |                             |
  +==============+=========+==========+=============================+
  | bytes        | n/a     | string   | tool available              |
  +--------------+---------+----------+-----------------------------+
  | text         | string  | string   | unnecessary                 |
  +--------------+---------+----------+-----------------------------+
  | tdate        | n/a     | string   | date-time per Section 7.3.1 |
  |              |         |          | of [JSON-SCHEMA]            |
  +--------------+---------+----------+-----------------------------+
  | integer      | n/a     | number   | integer                     |
  +--------------+---------+----------+-----------------------------+
  | eb64legacy   | n/a     | string   | tool available              |
  +--------------+---------+----------+-----------------------------+
  | uri          | n/a     | string   | uri per Section 7.3.6 of    |
  |              |         |          | [JSON-SCHEMA]               |
  +--------------+---------+----------+-----------------------------+
  | float32      | float32 | number   | unnecessary                 |
  +--------------+---------+----------+-----------------------------+

                 Table 5: CDDL Prelude Mapping in JSON

Appendix B.  The IODEF Data Model (JSON Schema)

  This section provides a JSON schema [JSON-SCHEMA] that defines the
  IODEF data model defined in this document.  Note that this section is
  informative.

  { "$schema": "https://json-schema.org/draft-04/schema#",
    "definitions": {
      "action": {"enum": ["nothing", "contact-source-site",
         "contact-target-site", "contact-sender", "investigate",
         "block-host", "block-network", "block-port",
         "rate-limit-host", "rate-limit-network",
         "rate-limit-port", "redirect-traffic", "honeypot",
         "upgrade-software", "rebuild-asset", "harden-asset",
         "remediate-other", "status-triage", "status-new-info",
         "watch-and-report", "training", "defined-coa", "other",
         "ext-value"]},
      "duration":{"enum":["second", "minute", "hour", "day",
        "month", "quarter", "year", "ext-value"]},
      "SpecID":{
        "enum":["urn:ietf:params:xml:ns:mile:mmdef:1.2",
         "private"]},
      "lang": {
        "type":"string", "pattern":
          "^$|[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"},
      "purpose": {"enum": ["traceback", "mitigation",
        "reporting", "watch", "other", "ext-value"]},
      "restriction":{"enum": ["public", "partner",
        "need-to-know", "private", "default", "white", "green",
        "amber", "red", "ext-value"]},
      "status": {"enum": ["new", "in-progress", "forwarded",
        "resolved", "future", "ext-value"]},
      "DATETIME": {"type": "string", "format": "date-time"},
      "BYTE": {"type": "string"},
      "PortlistType": {
        "type": "string", "pattern":
          "[0-9]+(\\-[0-9]+)?(,[0-9]+(\\-[0-9]+)?)*"},
      "TimeZonetype": {
        "type":"string", "pattern":
          "Z|[\\+\\-](0[0-9]|1[0-4]):[0-5][0-9]"},
      "URLtype": {
        "type": "string",
        "pattern":
          "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))
            ?(#(.*))?"},
      "IDtype": {"type": "string", "pattern":
        "[a-zA-Z_][a-zA-Z0-9_.-]*"},
      "IDREFType": {"$ref": "#/definitions/IDtype"},
      "MLStringType": {
        "oneOf": [{"type": "string"},
                  {"type": "object",
                    "properties": {
                      "value": {"type": "string"},
                      "lang": {"$ref": "#/definitions/lang"},
                      "translation-id": {"type": "string"}},
                     "required": ["value"],
                     "additionalProperties":false}]},
      "PositiveFloatType": {"type": "number", "minimum": 0},
      "PAddressType": {"$ref": "#/definitions/MLStringType"},
      "ExtensionType": {
        "type": "object",
        "properties": {
          "value": {"type": "string"},
          "name": {"type": "string"},
          "dtype":{"enum":["boolean", "byte", "bytes",
            "character", "json", "date-time", "ntpstamp",
            "integer", "portlist", "real", "string", "file",
            "path", "frame", "packet", "ipv4-packet",
            "ipv6-packet", "url", "csv", "winreg",
            "xml", "ext-value"], "default": "string"},
          "ext-dtype": {"type": "string"},
          "meaning": {"type": "string"},
          "formatid": {"type": "string"},
          "restriction": {
            "$ref": "#/definitions/restriction", "default":
              "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"}},
        "required": ["value", "dtype"],
        "additionalProperties":false},
      "ExtensionTypeList": {
        "type": "array",
        "items": {"$ref": "#/definitions/ExtensionType"},
        "minItems": 1},
      "SoftwareType": {
        "type": "object",
        "properties": {
          "SoftwareReference":{
            "$ref":"#/definitions/SoftwareReference"},
          "URL": {
            "type": "array",
            "items": {"$ref": "#/definitions/URLtype",
            "minItems": 1}},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1 }},
        "required": [],
        "additionalProperties": false},
      "SoftwareReference": {
        "type": "object",
        "properties": {
          "value": {"type": "string"},
          "spec-name": {"enum": ["custom", "cpe", "swid",
            "ext-value"]},
          "ext-spec-name": {"type": "string"},
          "dtype": {"enum": ["bytes", "integer", "real", "string",
            "xml", "ext-value"], "default": "string"},
          "ext-dtype": {"type": "string"}},
        "required": ["spec-name"],
        "additionalProperties": false},
      "STRUCTUREDINFO": {
        "type": "object",
        "properties": {
          "SpecID": {"$ref":"#/definitions/SpecID"},
          "ext-SpecID": {"type": "string"},
          "ContentID": {"type": "string"},
          "RawData": {
             "type": "array",
             "items": {"$ref":"#/definitions/BYTE"},
             "minItems": 1
          },
          "Reference": {
            "type": "array",
            "items": {"$ref": "#/definitions/Reference"},
            "minItems": 1
          },
          "Platform": {
            "type": "array",
            "items": {"$ref": "#/definitions/Platform"},
            "minItems": 1
          },
          "Scoring": {
            "type": "array",
            "items": {"$ref": "#/definitions/Scoring"},
            "minItems": 1}},
        "allOf": [
           {"required": ["SpecID"]},
           {"anyOf": [
             {"oneOf": [
               {"required":["Reference"]},
               {"required":["RawData"]}]},
             { "not" : {"required":["Reference", "RawData"]}}]}],
        "additionalProperties": false},
      "Platform": {
        "type": "object",
        "properties": {
          "SpecID": {"$ref":"#/definitions/SpecID"},
          "ext-SpecID": {"type": "string"},
          "ContentID": {"type": "string"},
          "RawData": {
             "type": "array",
             "items": {"$ref":"#/definitions/BYTE"},
             "minItems": 1
          },
          "Reference": {
            "type": "array",
            "items": {"$ref": "#/definitions/Reference"},
            "minItems": 1}},
        "required": ["SpecID"],
        "additionalProperties": false},
      "Scoring": {
        "type": "object",
        "properties": {
          "SpecID": {"$ref":"#/definitions/SpecID"},
          "ext-SpecID": {"type": "string"},
          "ContentID": {"type": "string"},
          "RawData": {
             "type": "array",
             "items": {"$ref":"#/definitions/BYTE"},
             "minItems": 1
          },
          "Reference": {
            "type": "array",
            "items": {"$ref": "#/definitions/Reference"},
            "minItems": 1}},
        "required": ["SpecID"],
        "additionalProperties": false},
      "Incident": {
        "title": "Incident",
        "description": "JSON schema for Incident class",
        "type": "object",
        "properties": {
          "purpose": {"$ref": "#/definitions/purpose"},
          "ext-purpose": {"type": "string"},
          "status": {"$ref": "#/definitions/status"},
          "ext-status": {"type": "string"},
          "lang": {"$ref": "#/definitions/lang"},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "IncidentID": {"$ref": "#/definitions/IncidentID"},
          "AlternativeID": {
            "$ref":"#/definitions/AlternativeID"},
          "RelatedActivity": {
            "type": "array",
            "items": {"$ref": "#/definitions/RelatedActivity"},
            "minItems": 1},
          "DetectTime": {"$ref": "#/definitions/DATETIME"},
          "StartTime": {"$ref": "#/definitions/DATETIME"},
          "EndTime": {"$ref": "#/definitions/DATETIME"},
          "RecoveryTime": {"$ref": "#/definitions/DATETIME"},
          "ReportTime": {"$ref": "#/definitions/DATETIME"},
          "GenerationTime": {"$ref": "#/definitions/DATETIME"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Discovery": {
            "type": "array",
            "items": {"$ref": "#/definitions/Discovery"},
            "minItems": 1},
          "Assessment": {
            "type": "array",
            "items": {"$ref": "#/definitions/Assessment"},
            "minItems": 1},
          "Method": {
            "type": "array",
            "items": {"$ref": "#/definitions/Method"},
            "minItems": 1},
          "Contact": {
            "type": "array",
            "items": {"$ref": "#/definitions/Contact"},
            "minItems": 1},
          "EventData": {
            "type": "array",
            "items": {"$ref": "#/definitions/EventData"},
            "minItems": 1},
          "Indicator": {
            "type": "array",
            "items": {"$ref": "#/definitions/Indicator"},
            "minItems": 1},
          "History": {"$ref": "#/definitions/History"},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": ["IncidentID", "GenerationTime", "Contact",
          "purpose"],
        "additionalProperties": false},
      "IncidentID": {
        "title": "IncidentID",
        "description": "JSON schema for IncidentID class",
        "type": "object",
        "properties": {
          "id": {"type": "string"},
          "name": {"type": "string"},
          "instance": {"type": "string"},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"}},
        "required": ["id", "name"],
        "additionalProperties": false},
      "AlternativeID": {
        "title": "AlternativeID",
        "description": "JSON schema for AlternativeID class",
        "type": "object",
        "properties": {
          "IncidentID": {
            "type": "array",
            "items":{"$ref": "#/definitions/IncidentID"},
            "minItems": 1},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"}},
        "required": ["IncidentID"],
        "additionalProperties": false},
      "RelatedActivity": {
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "IncidentID": {
            "type": "array",
            "items": {"$ref": "#/definitions/IncidentID"},
            "minItems": 1},
          "URL": {
            "type": "array",
            "items": {"$ref": "#/definitions/URLtype"},
            "minItems": 1},
          "ThreatActor": {
            "type": "array",
            "items": {"$ref": "#/definitions/ThreatActor"},
            "minItems": 1},
          "Campaign": {
            "type": "array",
            "items": {"$ref": "#/definitions/Campaign"},
            "minItems": 1},
          "IndicatorID": {
            "type": "array",
            "items": {"$ref": "#/definitions/IndicatorID"},
            "minItems": 1},
          "Confidence": {"$ref": "#/definitions/Confidence"},
          "Description": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "AdditionalData": {
            "$ref": "#/definitions/ExtensionTypeList"}},
        "additionalProperties": false},
      "ThreatActor": {
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "ThreatActorID": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "URL": {
            "type":"array",
            "items":{"$ref":"#/definitions/URLtype"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "additionalProperties": false},
      "Campaign": {
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "CampaignID": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "URL": {
            "type":"array",
            "items":{"$ref":"#/definitions/URLtype"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}}},
      "Contact": {
        "type": "object",
        "properties": {
          "role": {
            "enum":["creator", "reporter", "admin", "tech",
                    "provider", "user", "billing", "legal",
                    "irt", "abuse", "cc", "cc-irt", "leo",
                    "vendor", "vendor-support", "victim",
                    "victim-notified", "ext-value"]},
          "ext-role": {"type": "string"},
          "type": {
            "enum": ["person", "organization", "ext-value"]},
          "ext-type": {"type": "string"},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "ContactName": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "ContactTitle": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "RegistryHandle": {
            "type":"array",
            "items":{"$ref":"#/definitions/RegistryHandle"},
            "minItems": 1},
          "PostalAddress": {
            "type":"array",
            "items":{"$ref":"#/definitions/PostalAddress"},
            "minItems": 1},
          "Email": {
            "type": "array",
            "items": {"$ref": "#/definitions/Email"},
            "minItems": 1},
          "Telephone": {
            "type": "array",
            "items": {"$ref": "#/definitions/Telephone"},
            "minItems": 1},
          "Timezone": {"$ref": "#/definitions/TimeZonetype"},
          "Contact": {
            "type": "array",
            "items": {"$ref": "#/definitions/Contact"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": ["role", "type"],
        "additionalProperties": false},
      "RegistryHandle": {
        "type": "object",
        "properties": {
          "handle": {"type": "string"},
          "registry": {
            "enum": ["internic", "apnic", "arin", "lacnic",
              "ripe", "afrinic", "local", "ext-value"]},
          "ext-registry": {"type": "string"}},
        "required": ["handle", "registry"],
        "additionalProperties": false},
      "PostalAddress": {
        "type": "object",
        "properties": {
          "type": {
            "enum": ["street", "mailing", "ext-value"]},
          "ext-type": {"type": "string"},
          "PAddress": {"$ref": "#/definitions/PAddressType"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": ["PAddress"],
        "additionalProperties": false},
      "Email": {
        "type": "object",
        "properties": {
          "type": {
            "enum":["direct", "hotline", "ext-value"]},
          "ext-type": {"type": "string"},
          "EmailTo": {"type": "string"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": ["EmailTo"],
        "additionalProperties": false},
      "Telephone": {
        "type": "object",
        "properties": {
          "type": {
            "enum":["wired", "mobile", "fax", "hotline",
              "ext-value"]},
          "ext-type": {"type": "string"},
          "TelephoneNumber": {"type": "string"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": ["TelephoneNumber"],
        "additionalProperties": false},
      "Discovery": {
        "type": "object",
        "properties": {
          "source": {
            "enum":["nidps", "hips", "siem", "av",
              "third-party-monitoring", "incident", "os-log",
              "application-log", "device-log", "network-flow",
              "passive-dns", "investigation", "audit",
              "internal-notification", "external-notification",
              "leo", "partner", "actor", "unknown", "ext-value"]},
          "ext-source": {"type": "string"},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Contact": {
            "type": "array",
            "items": {"$ref": "#/definitions/Contact"},
            "minItems": 1},
          "DetectionPattern": {
            "type":"array",
            "items":{"$ref":"#/definitions/DetectionPattern"},
            "minItems": 1}},
        "required": [],
        "additionalProperties": false},
      "DetectionPattern": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "Application": {"$ref": "#/definitions/SoftwareType"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "DetectionConfiguration": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1}},
        "allOf": [
          {"required": ["Application"]},
          {"oneOf": [
            {"required":["Description"]},
            {"required":["DetectionConfiguration"]}]}],
        "additionalProperties": false},
      "Method": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "Reference": {
            "type": "array",
            "items": {"$ref": "#/definitions/Reference"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "AttackPattern": {
            "type":"array",
            "items":{"$ref":"#/definitions/STRUCTUREDINFO"},
            "minItems": 1},
          "Vulnerability": {
            "type":"array",
            "items":{"$ref":"#/definitions/STRUCTUREDINFO"},
            "minItems": 1},
          "Weakness": {
            "type":"array",
            "items":{"$ref":"#/definitions/STRUCTUREDINFO"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": [],
        "additionalProperties": false},
      "Reference": {
        "type": "object",
        "properties": {
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "ReferenceName": {
            "$ref":"#/definitions/ReferenceName"},
          "URL":{
            "type":"array",
            "items":{"$ref":"#/definitions/URLtype"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": [],
        "additionalProperties": false},
      "ReferenceName" : {
        "type": "object",
        "properties": {
          "specIndex": {"type": "number"},
          "ID": {"$ref":"#/definitions/IDtype"}},
        "required": ["specIndex", "ID"],
        "additionalProperties": false},
      "Assessment": {
        "type": "object",
        "properties": {
          "occurrence": {"enum":["actual", "potential"]},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "IncidentCategory": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Impact": {
           "type": "array",
           "items": {
             "properties": {
               "SystemImpact":{
                 "$ref":"#/definitions/SystemImpact"},
               "BusinessImpact":{
                 "$ref":"#/definitions/BusinessImpact"},
               "TimeImpact":{"$ref":"#/definitions/TimeImpact"},
               "MonetaryImpact":{
                 "$ref":"#/definitions/MonetaryImpact"},
               "IntendedImpact":{
                 "$ref":"#/definitions/BusinessImpact"}},
             "additionalProperties":false},
           "minItems" : 1
          },
          "Counter": {
            "type": "array",
            "items": {"$ref": "#/definitions/Counter"},
            "minItems": 1},
          "MitigatingFactor": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Cause": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Confidence": {"$ref": "#/definitions/Confidence"},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": ["Impact"],
        "additionalProperties": false},
      "SystemImpact": {
        "type": "object",
        "properties": {
          "severity": {"enum":["low", "medium", "high"]},
          "completion": {"enum":["failed", "succeeded"]},
          "type": {
            "enum":["takeover-account", "takeover-service",
              "takeover-system", "cps-manipulation", "cps-damage",
              "availability-data", "availability-account",
              "availability-service", "availability-system",
              "damaged-system", "damaged-data",
              "breach-proprietary", "breach-privacy",
              "breach-credential", "breach-configuration",
              "integrity-data", "integrity-configuration",
              "integrity-hardware", "traffic-redirection",
              "monitoring-traffic", "monitoring-host",
              "policy", "unknown", "ext-value"]},
          "ext-type": {"type": "string"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": ["type"],
        "additionalProperties": false},
      "BusinessImpact": {
        "type": "object",
        "properties": {
          "severity": {"enum":["none", "low", "medium", "high",
            "unknown", "ext-value"], "default": "unknown"},
          "ext-severity": {"type":"string"},
          "type": {"enum":["breach-proprietary",
            "breach-privacy", "breach-credential",
            "loss-of-integrity", "loss-of-service",
            "theft-financial", "theft-service",
            "degraded-reputation", "asset-damage",
            "asset-manipulation", "legal", "extortion",
            "unknown", "ext-value"]},
          "ext-type": {"type": "string"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": ["type"],
        "additionalProperties": false},
      "TimeImpact": {
        "type": "object",
        "properties": {
          "value": {"$ref": "#/definitions/PositiveFloatType"},
          "severity": {"enum": ["low", "medium", "high"]},
          "metric": {"enum": ["labor", "elapsed", "downtime",
            "ext-value"]},
          "ext-metric": {"type": "string"},
          "duration": {
            "$ref":"#/definitions/duration", "default": "hour"},
          "ext-duration": {"type": "string"}},
        "required": ["value", "metric"],
        "additionalProperties": false},
      "MonetaryImpact": {
        "type": "object",
        "properties": {
          "value": {"$ref": "#/definitions/PositiveFloatType"},
          "severity": {"enum":["low", "medium", "high"]},
          "currency": {"type": "string"}},
        "required": ["value"],
        "additionalProperties": false},
      "Confidence": {
        "type": "object",
        "properties": {
          "value": {"type": "number"},
          "rating": {"enum": ["low", "medium", "high", "numeric",
                     "unknown", "ext-value"]},
          "ext-rating": {"type":"string"}},
        "required": ["value", "rating"],
        "additionalProperties": false},
      "History": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "HistoryItem": {
            "type": "array",
            "items": {"$ref": "#/definitions/HistoryItem"},
            "minItems": 1}},
        "required": ["HistoryItem"],
        "additionalProperties": false},
      "HistoryItem": {
        "type": "object",
        "properties": {
          "action": {
            "$ref": "#/definitions/action", "default": "other"},
          "ext-action": {"type": "string"},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "DateTime": {"$ref": "#/definitions/DATETIME"},
          "IncidentID": {"$ref": "#/definitions/IncidentID"},
          "Contact": {"$ref": "#/definitions/Contact"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "DefinedCOA": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": ["DateTime", "action"],
        "additionalProperties": false},
      "EventData": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "Description": {"type": "array",
            "items": { "$ref":"#/definitions/MLStringType"}},
          "DetectTime": {"$ref": "#/definitions/DATETIME"},
          "StartTime": {"$ref": "#/definitions/DATETIME"},
          "EndTime": {"$ref": "#/definitions/DATETIME"},
          "RecoveryTime": {"$ref": "#/definitions/DATETIME"},
          "ReportTime": {"$ref": "#/definitions/DATETIME"},
          "Contact": {
            "type": "array",
            "items": {"$ref": "#/definitions/Contact"},
            "minItems": 1},
          "Discovery": {
            "type": "array",
            "items": {"$ref": "#/definitions/Discovery"},
            "minItems": 1},
          "Assessment": {"$ref": "#/definitions/Assessment"},
          "Method": {
            "type": "array",
            "items": {"$ref": "#/definitions/Method"},
            "minItems": 1},
          "System": {
            "type": "array",
            "items": {"$ref": "#/definitions/System"},
            "minItems": 1},
          "Expectation": {
            "type": "array",
            "items": {"$ref": "#/definitions/Expectation"},
            "minItems": 1},
          "RecordData": {
            "type": "array",
            "items": {"$ref": "#/definitions/RecordData"},
            "minItems": 1},
          "EventData": {
            "type": "array",
            "items": {"$ref": "#/definitions/EventData"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": [],
        "additionalProperties": false},
      "Expectation": {
        "type": "object",
        "properties": {
          "action": {
            "$ref":"#/definitions/action", "default": "other"},
          "ext-action": {"type": "string"},
          "severity": {"enum": ["low", "medium", "high"]},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "default"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "DefinedCOA": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "StartTime": {"$ref": "#/definitions/DATETIME"},
          "EndTime": {"$ref": "#/definitions/DATETIME"},
          "Contact": {"$ref": "#/definitions/Contact"}},
        "required": [],
        "additionalProperties": false},
      "System": {
        "type": "object",
        "properties": {
          "category": {
            "enum": ["source", "target", "intermediate", "sensor",
                     "infrastructure", "ext-value"]},
          "ext-category": {"type": "string"},
          "interface": {"type": "string"},
          "spoofed": {
            "enum": ["unknown", "yes", "no"], "default":"unknown"},
          "virtual": {
            "enum": ["yes", "no", "unknown"], "default":"unknown"},
          "ownership": {
            "enum":["organization", "personal", "partner",
                    "customer", "no-relationship", "unknown",
                    "ext-value"]},
          "ext-ownership": {"type": "string"},
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "Node": {"$ref": "#/definitions/Node"},
          "NodeRole": {
            "type": "array",
            "items": {"$ref": "#/definitions/NodeRole"},
            "minItems": 1},
          "Service": {
            "type": "array",
            "items": {"$ref": "#/definitions/Service"},
            "minItems": 1},
          "OperatingSystem": {
            "type": "array",
            "items": {"$ref": "#/definitions/SoftwareType"},
            "minItems": 1},
          "Counter": {
            "type": "array",
            "items": {"$ref": "#/definitions/Counter"},
            "minItems": 1},
          "AssetID": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": ["Node"],
        "additionalProperties": false},
      "Node": {
        "type": "object",
        "properties": {
          "DomainData": {
            "type": "array",
            "items": {"$ref": "#/definitions/DomainData"},
            "minItems": 1},
          "Address": {
            "type": "array",
            "items": {"$ref": "#/definitions/Address"},
            "minItems": 1},
          "PostalAddress": {
            "$ref": "#/definitions/PostalAddress"},
          "Location": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Counter": {
            "type":"array",
            "items":{"$ref":"#/definitions/Counter"},
            "minItems": 1}},
        "anyOf": [
           {"required": ["DomainData"]},
           {"required": ["Address"]}
        ],
        "additionalProperties": false},
      "Address": {
        "type": "object",
        "properties": {
          "value": {"type": "string"},
          "category": {
            "enum":["asn", "atm", "e-mail", "ipv4-addr", "ipv4-net",
              "ipv4-net-masked", "ipv4-net-mask", "ipv6-addr",
              "ipv6-net", "ipv6-net-masked", "mac", "site-uri",
              "ext-value"], "default": "ipv6-addr"},
          "ext-category": {"type": "string"},
          "vlan-name": {"type": "string"},
          "vlan-num": {"type": "number"},
          "observable-id": {"$ref": "#/definitions/IDtype"}},
        "required": ["value", "category"],
        "additionalProperties": false},
      "NodeRole": {
        "type": "object",
        "properties": {
          "category": {
            "enum":["client", "client-enterprise",
              "client-partner", "client-remote", "client-kiosk",
              "client-mobile", "server-internal", "server-public",
              "www", "mail", "webmail", "messaging", "streaming",
              "voice", "file", "ftp", "p2p", "name", "directory",
              "credential", "print", "application", "database",
              "backup", "dhcp", "assessment", "source-control",
              "config-management", "monitoring", "infra",
              "infra-firewall", "infra-router", "infra-switch",
              "camera", "proxy", "remote-access", "log",
              "virtualization", "pos", "scada",
              "scada-supervisory", "sinkhole", "honeypot",
              "anomyzation", "c2-server", "malware-distribution",
              "drop-server", "hop-point", "reflector",
              "phishing-site", "spear-phishing-site",
              "recruiting-site", "fraudulent-site",
              "ext-value"]},
          "ext-category": {"type": "string"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": ["category"],
        "additionalProperties": false},
      "Counter": {
        "type": "object",
        "properties": {
          "value": {"type": "number"},
          "type": {
            "enum": ["count", "peak", "average", "ext-value"]},
          "ext-type": {"type": "string"},
          "unit":{"enum":["byte", "mbit", "packet", "flow",
            "session", "alert", "message", "event", "host",
            "site", "organization", "ext-value"]},
          "ext-unit": {"type": "string"},
          "meaning": {"type": "string"},
          "duration": {
            "$ref":"#/definitions/duration", "default": "hour"},
          "ext-duration": {"type": "string"}},
        "required": ["value", "type", "unit"],
        "additionalProperties": false},
      "DomainData": {
        "type": "object",
        "properties": {
          "system-status": {
            "enum": ["spoofed", "fraudulent", "innocent-hacked",
              "innocent-hijacked", "unknown", "ext-value"]},
          "ext-system-status": {"type": "string"},
          "domain-status": {
            "enum": [ "reservedDelegation", "assignedAndActive",
                      "assignedAndInactive", "assignedAndOnHold",
                      "revoked", "transferPending",
                      "registryLock", "registrarLock",
                      "other", "unknown", "ext-value"]},
          "ext-domain-status": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "Name": {"type": "string"},
          "DateDomainWasChecked": {
            "$ref": "#/definitions/DATETIME"},
          "RegistrationDate": {
            "$ref": "#/definitions/DATETIME"},
          "ExpirationDate": {"$ref": "#/definitions/DATETIME"},
          "RelatedDNS": {
            "type": "array",
            "items": {"$ref": "#/definitions/ExtensionType"},
            "minItems": 1},
          "NameServers": {
            "type": "array",
            "items": {"$ref": "#/definitions/NameServers"},
            "minItems": 1},
          "DomainContacts": {
            "$ref": "#/definitions/DomainContacts"}},
        "required": ["Name", "system-status", "domain-status"],
        "additionalProperties": false},
      "NameServers": {
        "type": "object",
        "properties": {
          "Server": {"type": "string"},
          "Address": {
            "type":"array",
            "items":{"$ref":"#/definitions/Address"},
            "minItems": 1}},
        "required": ["Server", "Address"],
        "additionalProperties": false},
      "DomainContacts": {
        "type": "object",
        "properties": {
          "SameDomainContact": {"type": "string"},
          "Contact": {
            "type":"array",
            "items":{"$ref":"#/definitions/Contact"},
            "minItems": 1}},
        "oneOf": [
           {"required": ["SameDomainContact"]},
           {"required": ["Contact"]}],
        "additionalProperties": false},
      "Service": {
        "type": "object",
        "properties": {
          "ip-protocol": {"type": "number"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "ServiceName": {"$ref": "#/definitions/ServiceName"},
          "Port": {"type": "number"},
          "Portlist": {"$ref": "#/definitions/PortlistType"},
          "ProtoCode": {"type": "number"},
          "ProtoType": {"type": "number"},
          "ProtoField": {"type": "number"},
          "ApplicationHeaderField":{
            "$ref":"#/definitions/ExtensionTypeList"},
          "EmailData": {"$ref": "#/definitions/EmailData"},
          "Application": {
            "$ref": "#/definitions/SoftwareType"}},
        "required": [],
        "additionalProperties": false},
      "ServiceName": {
        "type": "object",
        "properties": {
          "IANAService": {"type": "string"},
          "URL": {
            "type": "array", "items": {
              "$ref": "#/definitions/URLtype"}},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": [],
        "additionalProperties": false},
      "EmailData": {
        "type": "object",
        "properties": {
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "EmailTo": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "EmailFrom": {"type": "string"},
          "EmailSubject": {"type": "string"},
          "EmailX-Mailer": {"type": "string"},
          "EmailHeaderField": {
            "type": "array",
            "items": {"$ref": "#/definitions/ExtensionType"},
            "minItems": 1},
          "EmailHeaders": {"type": "string"},
          "EmailBody": {"type": "string"},
          "EmailMessage": {"type": "string"},
          "HashData": {
            "type": "array",
            "items": {"$ref": "#/definitions/HashData"},
            "minItems": 1},
          "Signature": {
            "type": "array",
            "items": {"$ref": "#/definitions/BYTE"},
            "minItems": 1}},
        "required": [],
        "additionalProperties": false},
      "RecordData": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "DateTime": {"$ref": "#/definitions/DATETIME"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "Application": {"$ref": "#/definitions/SoftwareType"},
          "RecordPattern": {
            "type": "array",
            "items": {"$ref": "#/definitions/RecordPattern"},
            "minItems": 1},
          "RecordItem": {
            "type": "array",
            "items": {"$ref": "#/definitions/ExtensionType"},
            "minItems": 1},
          "URL": {
            "type": "array",
            "items": {"$ref": "#/definitions/URLtype"},
            "minItems": 1},
          "FileData": {
            "type": "array",
            "items": {"$ref": "#/definitions/FileData"},
            "minItems": 1},
          "WindowsRegistryKeysModified": {
            "type": "array",
            "items": {
              "$ref":"#/definitions/WindowsRegistryKeysModified"},
            "minItems": 1},
          "CertificateData": {
            "type":"array",
            "items":{"$ref":"#/definitions/CertificateData"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": [],
        "additionalProperties": false},
      "RecordPattern": {
        "type": "object",
        "properties": {
          "value": {"type": "string"},
          "type": {
            "enum": ["regex", "binary", "xpath", "ext-value"],
            "default": "regex"},
          "ext-type": {"type": "string"},
          "offset": {"type": "number"},
          "offsetunit": {"enum":["line", "byte", "ext-value"] ,
                         "default": "line"},
          "ext-offsetunit": {"type": "string"},
          "instance": {"type": "number"}},
        "required": ["value", "type"],
        "additionalProperties": false},
      "WindowsRegistryKeysModified": {
        "type": "object",
        "properties": {
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "Key": {
            "type": "array",
            "items": {"$ref": "#/definitions/Key"},
            "minItems": 1}},
        "required": ["Key"],
        "additionalProperties": false},
      "Key": {
        "type": "object",
        "properties": {
          "registryaction": {"enum": ["add-key", "add-value",
                            "delete-key", "delete-value",
                            "modify-key", "modify-value",
                            "ext-value"]},
          "ext-registryaction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "KeyName": {"type":"string"},
          "KeyValue": {"type": "string"}},
        "required": ["KeyName"],
        "additionalProperties": false},
      "CertificateData": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "Certificate": {
            "type": "array",
            "items": {"$ref": "#/definitions/Certificate"},
            "minItems": 1}},
        "required": ["Certificate"],
        "additionalProperties": false},
      "Certificate": {
        "type": "object",
        "properties": {
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "X509Data": {"$ref": "#/definitions/BYTE"},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1}},
        "required": ["X509Data"],
        "additionalProperties": false},
      "FileData": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction"},
          "ext-restriction": {"type": "string"},
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "File": {
            "type": "array",
            "items": {"$ref": "#/definitions/File"},
            "minItems": 1}},
        "required": ["File"],
        "additionalProperties": false},
      "File": {
        "type": "object",
        "properties": {
          "observable-id": {"$ref": "#/definitions/IDtype"},
          "FileName": {"type": "string"},
          "FileSize": {"type": "number"},
          "FileType": {"type": "string"},
          "URL": {
            "type": "array",
            "items": {"$ref": "#/definitions/URLtype"},
            "minItems": 1},
          "HashData": {"$ref": "#/definitions/HashData"},
          "Signature": {
            "type": "array",
            "items": {"$ref": "#/definitions/BYTE"},
            "minItems": 1},
          "AssociatedSoftware": {
            "$ref": "#/definitions/SoftwareType"},
          "FileProperties": {
            "type":"array",
            "items":{"$ref":"#/definitions/ExtensionType"},
            "minItems": 1}},
        "required": [],
        "additionalProperties": false},
      "HashData": {
        "type": "object",
        "properties": {
          "scope": {"enum": ["file-contents", "file-pe-section",
            "file-pe-iat", "file-pe-resource", "file-pdf-object",
            "email-hash", "email-headers-hash", "email-body-hash",
            "ext-value"]},
          "HashTargetID": {"type": "string"},
          "Hash": {
            "type": "array",
            "items": {"$ref": "#/definitions/Hash"},
            "minItems": 1},
          "FuzzyHash": {
            "type": "array",
            "items": {"$ref": "#/definitions/FuzzyHash"},
            "minItems": 1}},
        "required": ["scope"],
        "additionalProperties": false},
      "Hash": {
        "type": "object",
        "properties": {
          "DigestMethod": {"$ref": "#/definitions/BYTE"},
          "DigestValue": {"$ref": "#/definitions/BYTE"},
          "CanonicalizationMethod": {
            "$ref": "#/definitions/BYTE"},
          "Application": {
            "$ref": "#/definitions/SoftwareType"}},
        "required": ["DigestMethod", "DigestValue"],
        "additionalProperties": false},
      "FuzzyHash": {
        "type": "object",
        "properties": {
          "FuzzyHashValue": {
            "type": "array",
            "items": {"$ref": "#/definitions/ExtensionType"},
            "minItems": 1},
          "Application": {"$ref": "#/definitions/SoftwareType"},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": ["FuzzyHashValue"],
        "additionalProperties": false},
      "Indicator": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "IndicatorID": {"$ref": "#/definitions/IndicatorID"},
          "AlternativeIndicatorID": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/AlternativeIndicatorID"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "StartTime": {"$ref": "#/definitions/DATETIME"},
          "EndTime": {"$ref": "#/definitions/DATETIME"},
          "Confidence": {"$ref": "#/definitions/Confidence"},
          "Contact": {
            "type": "array",
            "items": {"$ref": "#/definitions/Contact"},
            "minItems": 1},
          "Observable": {"$ref": "#/definitions/Observable"},
          "uid-ref": {"$ref": "#/definitions/IDREFType"},
          "IndicatorExpression":{
           "$ref":"#/definitions/IndicatorExpression"},
          "IndicatorReference":{
           "$ref": "#/definitions/IndicatorReference"},
          "NodeRole": {
            "type": "array",
            "items": {"$ref": "#/definitions/NodeRole"},
            "minItems": 1},
          "AttackPhase": {
            "type": "array",
            "items": {"$ref": "#/definitions/AttackPhase"},
            "minItems": 1},
          "Reference": {
            "type": "array",
            "items": {"$ref": "#/definitions/Reference"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "allOf": [
          {"required": ["IndicatorID"]},
          {"oneOf": [
            {"required":["Observable"]},
            {"required":["uid-ref"]},
            {"required":["IndicatorExpression"]},
            {"required":["IndicatorReference"]}]}],
        "additionalProperties": false},
      "IndicatorID": {
        "type": "object",
        "properties": {
          "id": {"type": "string"},
          "name": {"type": "string"},
          "version": {"type": "string"}},
        "required": ["id", "name", "version"],
        "additionalProperties": false},
      "AlternativeIndicatorID": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
            "default": "private"},
          "ext-restriction": {"type": "string"},
          "IndicatorID": {
            "type": "array",
            "items": {"$ref": "#/definitions/IndicatorID"},
            "minItems": 1}},
        "required": ["IndicatorID"],
        "additionalProperties": false},
      "Observable": {
        "type": "object",
        "properties": {
          "restriction": {"$ref": "#/definitions/restriction",
                          "default": "private"},
          "ext-restriction": {"type": "string"},
          "System": {"$ref": "#/definitions/System"},
          "Address": {"$ref": "#/definitions/Address"},
          "DomainData": {"$ref": "#/definitions/DomainData"},
          "EmailData": {"$ref": "#/definitions/EmailData"},
          "Service": {"$ref": "#/definitions/Service"},
          "WindowsRegistryKeysModified": {
            "$ref": "#/definitions/WindowsRegistryKeysModified"},
          "FileData": {"$ref": "#/definitions/FileData"},
          "CertificateData": {
            "$ref": "#/definitions/CertificateData"},
          "RegistryHandle": {
            "$ref": "#/definitions/RegistryHandle"},
          "RecordData":  {"$ref": "#/definitions/RecordData"},
          "EventData": {"$ref": "#/definitions/EventData"},
          "Incident": {"$ref": "#/definitions/Incident"},
          "Expectation": {"$ref": "#/definitions/Expectation"},
          "Reference": {"$ref": "#/definitions/Reference"},
          "Assessment": {"$ref": "#/definitions/Assessment"},
          "DetectionPattern": {
            "$ref": "#/definitions/DetectionPattern"},
          "HistoryItem": {"$ref": "#/definitions/HistoryItem"},
          "BulkObservable": {
            "$ref": "#/definitions/BulkObservable"},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
          "oneOf": [
            {"required":["System"]},
            {"required":["Address"]},
            {"required":["DomainData"]},
            {"required":["EmailData"]},
            {"required":["Service"]},
            {"required":["WindowsRegistryKeysModified"]},
            {"required":["FileData"]},
            {"required":["CertificateData"]},
            {"required":["RegistryHandle"]},
            {"required":["RecordData"]},
            {"required":["EventData"]},
            {"required":["Incident"]},
            {"required":["Expectation"]},
            {"required":["Reference"]},
            {"required":["Assessment"]},
            {"required":["DetectionPattern"]},
            {"required":["HistoryItem"]},
            {"required":["BulkObservable"]},
            {"required":["AdditionalData"]}],
        "additionalProperties": false},
      "BulkObservable": {
        "type": "object",
        "properties": {
          "type": {"enum": ["asn", "atm", "e-mail", "ipv4-addr",
            "ipv4-net", "ipv4-net-mask", "ipv6-addr", "ipv6-net",
            "ipv6-net-mask", "mac", "site-uri", "domain-name",
            "domain-to-ipv4", "domain-to-ipv6",
            "domain-to-ipv4-timestamp",
            "domain-to-ipv6-timestamp", "ipv4-port", "ipv6-port",
            "windows-reg-key", "file-hash", "email-x-mailer",
            "email-subject", "http-user-agent",
            "http-request-url", "mutex", "file-path", "user-name",
            "ext-value"]},
          "ext-type": {"type": "string"},
          "BulkObservableFormat":{
            "$ref": "#/definitions/BulkObservableFormat"},
          "BulkObservableList": {"type": "string"},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": ["BulkObservableList"],
        "additionalProperties": false},
      "BulkObservableFormat": {
        "type": "object",
        "properties": {
          "Hash": {"$ref": "#/definitions/Hash"},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "oneOf": [
           {"required": ["Hash"]},
           {"required": ["AdditionalData"]}
        ],
        "additionalProperties": false},
      "IndicatorExpression": {
        "type": "object",
        "properties": {
          "operator": {
            "enum": ["not", "and", "or", "xor"], "default": "and"},
          "ext-operator": {"type": "string"},
          "IndicatorExpression": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/IndicatorExpression"},
            "minItems": 1},
          "Observable": {
            "type": "array",
            "items": {"$ref": "#/definitions/Observable"},
            "minItems": 1},
          "uid-ref": {
            "type": "array",
            "items": {"$ref": "#/definitions/IDREFType"},
            "minItems": 1},
          "IndicatorReference": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/IndicatorReference"},
            "minItems": 1},
          "Confidence": {"$ref":"#/definitions/Confidence"},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": [],
        "additionalProperties": false},
      "IndicatorReference": {
        "type": "object",
        "properties": {
          "uid-ref": {"$ref":"#/definitions/IDREFType"},
          "euid-ref": {"type": "string"},
          "version": {"type": "string"}},
        "oneOf": [
           {"required": ["uid-ref"]},
           {"required": ["euid-ref"]}
        ],
        "additionalProperties": false},
      "AttackPhase": {
        "type": "object",
        "properties": {
          "AttackPhaseID": {
            "type": "array",
            "items": {"type": "string"},
            "minItems": 1},
          "URL": {
            "type": "array",
            "items": {"$ref": "#/definitions/URLtype"},
            "minItems": 1},
          "Description": {
            "type": "array",
            "items": {"$ref": "#/definitions/MLStringType"},
            "minItems": 1},
          "AdditionalData": {
            "$ref":"#/definitions/ExtensionTypeList"}},
        "required": [],
        "additionalProperties": false}},
    "title": "IODEF-Document",
    "description": "JSON schema for IODEF-Document class",
    "type": "object",
    "properties": {
      "version": {"type": "string"},
      "lang": {"$ref": "#/definitions/lang"},
      "format-id": {"type": "string"},
      "private-enum-name": {"type": "string"},
      "private-enum-id": {"type": "string"},
      "Incident": {
        "type": "array",
        "items": {"$ref": "#/definitions/Incident"},
        "minItems": 1},
      "AdditionalData": {
        "$ref":"#/definitions/ExtensionTypeList"}},
    "required": ["version", "Incident"],
    "additionalProperties": false}

                          Figure 6: JSON Schema

Acknowledgments

  We would like to thank Henk Birkholz, Carsten Bormann, Benjamin
  Kaduk, Alexey Melnikov, Yasuaki Morita, and Takahiko Nagata for their
  insightful comments on this document and CDDL.

Authors' Addresses

  Takeshi Takahashi
  National Institute of Information and Communications Technology
  4-2-1 Nukui-Kitamachi, Koganei, Tokyo
  184-8795
  Japan

  Phone: +81 42 327 5862
  Email: [email protected]


  Roman Danyliw
  CERT, Software Engineering Institute, Carnegie Mellon University
  4500 Fifth Avenue
  Pittsburgh, PA
  United States of America

  Email: [email protected]


  Mio Suzuki
  National Institute of Information and Communications Technology
  4-2-1 Nukui-Kitamachi, Koganei, Tokyo
  184-8795
  Japan

  Email: [email protected]