diff options
| author | GeorgeFI | 2023-07-19 10:35:27 +0200 |
|---|---|---|
| committer | GeorgeFI | 2023-07-19 10:35:27 +0200 |
| commit | 6742ffd1885c85d04b92654decae4b7982ea4a73 (patch) | |
| tree | 73b82d85975c31defd163db43ecc40db34473e59 | |
| parent | 97250e0d936479113b4b6fda129b5331e01133f7 (diff) | |
| download | sec-certs-6742ffd1885c85d04b92654decae4b7982ea4a73.tar.gz sec-certs-6742ffd1885c85d04b92654decae4b7982ea4a73.tar.zst sec-certs-6742ffd1885c85d04b92654decae4b7982ea4a73.zip | |
feat: Added certificate overview
| -rw-r--r-- | notebooks/fips/references.ipynb | 365 |
1 files changed, 353 insertions, 12 deletions
diff --git a/notebooks/fips/references.ipynb b/notebooks/fips/references.ipynb index 561a1226..b5ea1406 100644 --- a/notebooks/fips/references.ipynb +++ b/notebooks/fips/references.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 156, "id": "91a0cb1b", "metadata": {}, "outputs": [], @@ -21,6 +21,7 @@ "import numpy as np\n", "import seaborn as sns\n", "import logging\n", + "import networkx as nx\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "\n", @@ -416,7 +417,7 @@ }, { "cell_type": "markdown", - "id": "9b1a8c67", + "id": "794234f8", "metadata": {}, "source": [ "#### Total number of assigned CVEs across embodiments" @@ -425,7 +426,7 @@ { "cell_type": "code", "execution_count": 113, - "id": "65e27e65", + "id": "07474595", "metadata": {}, "outputs": [ { @@ -454,7 +455,7 @@ }, { "cell_type": "markdown", - "id": "64ceea53", + "id": "eba4495f", "metadata": {}, "source": [ "#### Total number of assigned CVEs across levels" @@ -463,7 +464,7 @@ { "cell_type": "code", "execution_count": 114, - "id": "05010c02", + "id": "504d3134", "metadata": {}, "outputs": [ { @@ -489,21 +490,78 @@ }, { "cell_type": "markdown", - "id": "62124355", + "id": "7b314d38", "metadata": {}, "source": [ "#### Total number of assigned CVEs across types" ] }, { + "cell_type": "code", + "execution_count": 115, + "id": "3acfa3ea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({'Software': 109,\n", + " 'Hardware': 96,\n", + " 'Firmware': 12,\n", + " 'Software-Hybrid': 3})" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "counter: Counter = Counter()\n", + "\n", + "for _, cert in cve_df.iterrows():\n", + " cert_type = cert[\"type\"]\n", + " counter[cert_type] = counter[cert_type] + 1\n", + " \n", + "counter" + ] + }, + { "cell_type": "markdown", - "id": "a336e012", + "id": "4692cad3", "metadata": {}, "source": [ "#### Total number of assigned CVEs across status\n" ] }, { + "cell_type": "code", + "execution_count": 116, + "id": "695df8a7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({'active': 32, 'historical': 188})" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "counter: Counter = Counter()\n", + "\n", + "for _, cert in cve_df.iterrows():\n", + " status = cert[\"status\"]\n", + " counter[status] = counter[status] + 1\n", + " \n", + "counter" + ] + }, + { "cell_type": "markdown", "id": "480bc189", "metadata": {}, @@ -800,7 +858,7 @@ { "cell_type": "code", "execution_count": 58, - "id": "6b68e012", + "id": "c53f3454", "metadata": {}, "outputs": [ { @@ -914,7 +972,7 @@ { "cell_type": "code", "execution_count": 84, - "id": "b3aa2e7e", + "id": "962d5073", "metadata": {}, "outputs": [], "source": [ @@ -939,7 +997,7 @@ { "cell_type": "code", "execution_count": 96, - "id": "0fc5988f", + "id": "7f53283a", "metadata": {}, "outputs": [ { @@ -975,7 +1033,7 @@ { "cell_type": "code", "execution_count": 95, - "id": "c5e978b6", + "id": "351df675", "metadata": {}, "outputs": [ { @@ -1278,8 +1336,291 @@ }, { "cell_type": "code", + "execution_count": 117, + "id": "dd08db81", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>cert_id</th>\n", + " <th>name</th>\n", + " <th>status</th>\n", + " <th>standard</th>\n", + " <th>type</th>\n", + " <th>level</th>\n", + " <th>embodiment</th>\n", + " <th>date_validation</th>\n", + " <th>date_sunset</th>\n", + " <th>algorithms</th>\n", + " <th>...</th>\n", + " <th>related_cves</th>\n", + " <th>module_directly_referenced_by</th>\n", + " <th>module_indirectly_referenced_by</th>\n", + " <th>module_directly_referencing</th>\n", + " <th>module_indirectly_referencing</th>\n", + " <th>policy_directly_referenced_by</th>\n", + " <th>policy_indirectly_referenced_by</th>\n", + " <th>policy_directly_referencing</th>\n", + " <th>policy_indirectly_referencing</th>\n", + " <th>year_from</th>\n", + " </tr>\n", + " <tr>\n", + " <th>dgst</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>6ef02a389c6415e7</th>\n", + " <td>3384</td>\n", + " <td>Delta Cryptographic Module</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Embedded</td>\n", + " <td>2019-03-27</td>\n", + " <td>2024-03-26</td>\n", + " <td>{RSA#3045, SHS#4536, AES#5659, DRBG#2285, SHA-...</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>2019</td>\n", + " </tr>\n", + " <tr>\n", + " <th>a080dde530fce451</th>\n", + " <td>3382</td>\n", + " <td>Titan Chip</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>1.0</td>\n", + " <td>Single Chip</td>\n", + " <td>2019-03-22</td>\n", + " <td>2024-03-21</td>\n", + " <td>{SHS#4537, ECDSA#1529, RSA#3045, SHS#4536}</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>{3384, 3383}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3384, 3383}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3384, 3383}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3384, 3383}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>2019</td>\n", + " </tr>\n", + " <tr>\n", + " <th>efb092e03612f568</th>\n", + " <td>3383</td>\n", + " <td>River Cryptographic Module</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Embedded</td>\n", + " <td>2019-03-22</td>\n", + " <td>2024-03-21</td>\n", + " <td>{RSA#3045, SHS#4536, AES#5659, DRBG#2285, SHA-...</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>{3382}</td>\n", + " <td>{3384, 3382, 3383}</td>\n", + " <td>2019</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>3 rows × 23 columns</p>\n", + "</div>" + ], + "text/plain": [ + " cert_id name status standard \\\n", + "dgst \n", + "6ef02a389c6415e7 3384 Delta Cryptographic Module active FIPS 140-2 \n", + "a080dde530fce451 3382 Titan Chip active FIPS 140-2 \n", + "efb092e03612f568 3383 River Cryptographic Module active FIPS 140-2 \n", + "\n", + " type level embodiment date_validation \\\n", + "dgst \n", + "6ef02a389c6415e7 Hardware 1.0 Multi-Chip Embedded 2019-03-27 \n", + "a080dde530fce451 Hardware 1.0 Single Chip 2019-03-22 \n", + "efb092e03612f568 Hardware 1.0 Multi-Chip Embedded 2019-03-22 \n", + "\n", + " date_sunset \\\n", + "dgst \n", + "6ef02a389c6415e7 2024-03-26 \n", + "a080dde530fce451 2024-03-21 \n", + "efb092e03612f568 2024-03-21 \n", + "\n", + " algorithms ... \\\n", + "dgst ... \n", + "6ef02a389c6415e7 {RSA#3045, SHS#4536, AES#5659, DRBG#2285, SHA-... ... \n", + "a080dde530fce451 {SHS#4537, ECDSA#1529, RSA#3045, SHS#4536} ... \n", + "efb092e03612f568 {RSA#3045, SHS#4536, AES#5659, DRBG#2285, SHA-... ... \n", + "\n", + " related_cves module_directly_referenced_by \\\n", + "dgst \n", + "6ef02a389c6415e7 NaN {3382} \n", + "a080dde530fce451 NaN {3384, 3383} \n", + "efb092e03612f568 NaN {3382} \n", + "\n", + " module_indirectly_referenced_by module_directly_referencing \\\n", + "dgst \n", + "6ef02a389c6415e7 {3384, 3382, 3383} {3382} \n", + "a080dde530fce451 {3384, 3382, 3383} {3384, 3383} \n", + "efb092e03612f568 {3384, 3382, 3383} {3382} \n", + "\n", + " module_indirectly_referencing policy_directly_referenced_by \\\n", + "dgst \n", + "6ef02a389c6415e7 {3384, 3382, 3383} {3382} \n", + "a080dde530fce451 {3384, 3382, 3383} {3384, 3383} \n", + "efb092e03612f568 {3384, 3382, 3383} {3382} \n", + "\n", + " policy_indirectly_referenced_by policy_directly_referencing \\\n", + "dgst \n", + "6ef02a389c6415e7 {3384, 3382, 3383} {3382} \n", + "a080dde530fce451 {3384, 3382, 3383} {3384, 3383} \n", + "efb092e03612f568 {3384, 3382, 3383} {3382} \n", + "\n", + " policy_indirectly_referencing year_from \n", + "dgst \n", + "6ef02a389c6415e7 {3384, 3382, 3383} 2019 \n", + "a080dde530fce451 {3384, 3382, 3383} 2019 \n", + "efb092e03612f568 {3384, 3382, 3383} 2019 \n", + "\n", + "[3 rows x 23 columns]" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df[\"cert_id\"].isin([3382, 3383, 3384])]" + ] + }, + { + "cell_type": "markdown", + "id": "ab76893c", + "metadata": {}, + "source": [ + "#### Certificate overview" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "id": "c9ae2ff9", + "metadata": {}, + "outputs": [], + "source": [ + "cert_id: int = 451233 # Enter the certificate ID you are interested in" + ] + }, + { + "cell_type": "code", + "execution_count": 176, + "id": "817d1b0d", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "refs_df: DataFrame = df[df[\"module_directly_referencing\"].notna()]\n", + " \n", + "if not refs_df[refs_df[\"cert_id\"] == cert_id].shape[0]:\n", + " print(\"Cert ID is not in the dataset, or does not references any other certificates\")\n", + "\n", + "cert_id_series = refs_df[refs_df[\"cert_id\"] == cert_id].iloc[0]\n", + "\n", + "graph = nx.DiGraph()\n", + "graph.add_node(cert_id)\n", + "\n", + "# Display which certificates are directly referenced by the chosen certificate\n", + "for referenced_cert_id in cert_id_series[\"module_directly_referencing\"]:\n", + " graph.add_node(referenced_cert_id)\n", + " graph.add_edge(cert_id, referenced_cert_id)\n", + "\n", + "\n", + "# Display which certificates are directly referencing the chosen certificate\n", + "for referencing_cert_id in cert_id_series[\"module_directly_referenced_by\"]:\n", + " graph.add_node(referencing_cert_id)\n", + " graph.add_edge(referencing_cert_id, cert_id)\n", + "\n", + "\n", + "pos = nx.circular_layout(graph)\n", + "nx.draw(graph, pos, arrows=True, with_labels=True, node_size=900)" + ] + }, + { + "cell_type": "code", "execution_count": null, - "id": "dcb396b3", + "id": "2775b35c", "metadata": {}, "outputs": [], "source": [] |
