

{"id":13398,"date":"2022-04-16T15:59:54","date_gmt":"2022-04-16T20:59:54","guid":{"rendered":"https:\/\/rud.is\/b\/?p=13398"},"modified":"2022-04-16T15:59:54","modified_gmt":"2022-04-16T20:59:54","slug":"keeping-those-ssh-keys-safe","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/","title":{"rendered":"Keeping Those SSH Keys Safe"},"content":{"rendered":"<p>I came across a <a href=\"https:\/\/aremykeyssafe.com\">neat site<\/a> that uses a Golang wasm function called from javascript on the page to help you see if your GitHub public SSH keys are &#8220;safe&#8221;. What does &#8220;safe&#8221; mean? This is what the function checks for (via that site):<\/p>\n<blockquote><p>\nRecommended key sizes are as follows:<\/p>\n<ul>\n<li>For the RSA algorithm at least 2048, recommended 4096<\/li>\n<li>The DSA algorithm should not be used<\/li>\n<li>For the ECDSA algorithm, it should be 521<\/li>\n<li>For the ED25519, the key size should be 256 or larger<\/li>\n<\/ul>\n<\/blockquote>\n<p>The site also provides links to standards and guides to support the need for stronger keys.<\/p>\n<p>I threw together a <a href=\"https:\/\/github.com\/hrbrmstr\/pubcheck\">small R package<\/a> \u2014 {pubcheck} \u2014 to check local keys, keys in a character vector, and keys residing in GitHub. One function will even check the GitHub keys of all the GitHub users a given account is following:<\/p>\n<h3>Local file<\/h3>\n<pre><code class=\"language-r\">library(pubcheck)\nlibrary(tidyverse)\n\ncheck_ssh_pub_key(\"~\/.ssh\/id_rsa.pub\") |&gt; \n  mutate(key = ifelse(is.na(key), NA_character_, sprintf(\"%s\u2026\", substr(key, 1, 30)))) |&gt; \n  knitr::kable()\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"left\">key<\/th>\n<th align=\"left\">algo<\/th>\n<th align=\"right\">len<\/th>\n<th align=\"left\">status<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">ssh-rsa AAAAB3NzaC1yc2EAAAADAQ\u2026<\/td>\n<td align=\"left\">rsa<\/td>\n<td align=\"right\">2048<\/td>\n<td align=\"left\">\u2705 Key is safe; For the RSA algorithm at least 2048, recommended 4096<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>A GitHub user<\/h3>\n<pre><code class=\"language-r\">check_gh_user_keys(c(\"hrbrmstr\", \"mikemahoney218\")) |&gt; \n  mutate(key = ifelse(is.na(key), NA_character_, sprintf(\"%s\u2026\", substr(key, 1, 30)))) |&gt; \n  knitr::kable()\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"left\">user<\/th>\n<th align=\"left\">key<\/th>\n<th align=\"left\">algo<\/th>\n<th align=\"right\">len<\/th>\n<th align=\"left\">status<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">hrbrmstr<\/td>\n<td align=\"left\">ssh-rsa AAAAB3NzaC1yc2EAAAADAQ\u2026<\/td>\n<td align=\"left\">rsa<\/td>\n<td align=\"right\">2048<\/td>\n<td align=\"left\">\u2705 Key is safe; For the RSA algorithm at least 2048, recommended 4096<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">hrbrmstr<\/td>\n<td align=\"left\">ssh-rsa AAAAB3NzaC1yc2EAAAADAQ\u2026<\/td>\n<td align=\"left\">rsa<\/td>\n<td align=\"right\">2048<\/td>\n<td align=\"left\">\u2705 Key is safe; For the RSA algorithm at least 2048, recommended 4096<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">hrbrmstr<\/td>\n<td align=\"left\">ssh-rsa AAAAB3NzaC1yc2EAAAADAQ\u2026<\/td>\n<td align=\"left\">rsa<\/td>\n<td align=\"right\">2048<\/td>\n<td align=\"left\">\u2705 Key is safe; For the RSA algorithm at least 2048, recommended 4096<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">mikemahoney218<\/td>\n<td align=\"left\">ssh-rsa AAAAB3NzaC1yc2EAAAADAQ\u2026<\/td>\n<td align=\"left\">rsa<\/td>\n<td align=\"right\">4096<\/td>\n<td align=\"left\">\u2705 Key is safe<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">mikemahoney218<\/td>\n<td align=\"left\">ssh-ed25519 AAAAC3NzaC1lZDI1NT\u2026<\/td>\n<td align=\"left\">ed25519<\/td>\n<td align=\"right\">256<\/td>\n<td align=\"left\">\u2705 Key is safe<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">mikemahoney218<\/td>\n<td align=\"left\">ssh-ed25519 AAAAC3NzaC1lZDI1NT\u2026<\/td>\n<td align=\"left\">ed25519<\/td>\n<td align=\"right\">256<\/td>\n<td align=\"left\">\u2705 Key is safe<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">mikemahoney218<\/td>\n<td align=\"left\">ssh-ed25519 AAAAC3NzaC1lZDI1NT\u2026<\/td>\n<td align=\"left\">ed25519<\/td>\n<td align=\"right\">256<\/td>\n<td align=\"left\">\u2705 Key is safe<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Keys of all the users a GitHub account is following<\/h3>\n<pre><code class=\"language-r\">check_gh_following(\"koenrh\") |&gt; \n  mutate(key = ifelse(is.na(key), NA_character_, sprintf(\"%s\u2026\", substr(key, 1, 30)))) |&gt; \n  knitr::kable()\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"left\">user<\/th>\n<th align=\"left\">key<\/th>\n<th align=\"left\">algo<\/th>\n<th align=\"right\">len<\/th>\n<th align=\"left\">status<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">framer<\/td>\n<td align=\"left\">NA<\/td>\n<td align=\"left\">NA<\/td>\n<td align=\"right\">NA<\/td>\n<td align=\"left\">NA<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">jurre<\/td>\n<td align=\"left\">ssh-rsa AAAAB3NzaC1yc2EAAAADAQ\u2026<\/td>\n<td align=\"left\">rsa<\/td>\n<td align=\"right\">2048<\/td>\n<td align=\"left\">\u2705 Key is safe; For the RSA algorithm at least 2048, recommended 4096<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>What&#8217;s it like out there?<\/h3>\n<p>I processed my followers list and had some interesting results:<\/p>\n<pre><code class=\"language-r\">library(pubcheck)\nlibrary(hrbragg)\nlibrary(tidyverse)\n\n# this takes a while as the # of users is &gt; 500!\nres &lt;- check_gh_following(\"hrbrmstr\")\n\nres |&gt; \n  count(user) |&gt; \n  arrange(n) |&gt; \n  count(n, name = \"n_users\") |&gt; \n  mutate(csum = cumsum(n_users)) |&gt; \n  ggplot() +\n  geom_line(\n    aes(n, csum)\n  ) +\n  geom_point(\n    aes(n, csum)\n  ) + \n  scale_x_continuous(breaks = 1:21) +\n  scale_y_comma() +\n  labs(\n    x = \"# Keys In User GH\", y = \"# Users\",\n    title = \"Cumulative Plot Of User\/Key Counts [n=522 users]\",\n    subtitle = \"A handful of users have &gt;=10 keys configured in GitHub; one has 21!!\"\n  ) +\n  theme_cs(grid=\"XY\")\n<\/code><\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"13401\" data-permalink=\"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/pubkey-01\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?fit=1502%2C958&amp;ssl=1\" data-orig-size=\"1502,958\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"pubkey-01\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?fit=510%2C325&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=510%2C325&#038;ssl=1\" alt=\"\" width=\"510\" height=\"325\" class=\"aligncenter size-large wp-image-13401\" srcset=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=530%2C338&amp;ssl=1 530w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=300%2C191&amp;ssl=1 300w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=150%2C96&amp;ssl=1 150w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=768%2C490&amp;ssl=1 768w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=500%2C319&amp;ssl=1 500w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=1200%2C765&amp;ssl=1 1200w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=400%2C255&amp;ssl=1 400w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=800%2C510&amp;ssl=1 800w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?resize=200%2C128&amp;ssl=1 200w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?w=1502&amp;ssl=1 1502w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?w=1020&amp;ssl=1 1020w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/a><\/p>\n<pre><code class=\"language-r\">res |&gt; \n  count(algo, len, status) |&gt; \n  mutate(kind = ifelse(is.na(status), \"No SSH keys in account\", sprintf(\"%s:%s\\n%s\", algo, len, status))) |&gt; \n  mutate(kind = fct_reorder(gsub(\"[;,]\", \"\\n\", kind), n, identity)) |&gt; \n  ggplot() +\n  geom_col(\n    aes(n, kind),\n    width = 0.65, \n    fill = \"steelblue\", \n    color = NA\n  ) +\n  scale_x_comma(position = \"top\") +\n  labs(\n    x = NULL, y = NULL,\n    title = \"SSH Key Summary For GH Users hrbrmstr Is Following\"\n  ) +\n  theme_cs(grid=\"X\") +\n  theme(plot.title.position = \"plot\")\n<\/code><\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"13403\" data-permalink=\"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/pubcheck-02\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?fit=1476%2C1476&amp;ssl=1\" data-orig-size=\"1476,1476\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"pubcheck-02\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?fit=510%2C510&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=510%2C510&#038;ssl=1\" alt=\"\" width=\"510\" height=\"510\" class=\"aligncenter size-large wp-image-13403\" srcset=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=530%2C530&amp;ssl=1 530w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=768%2C768&amp;ssl=1 768w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=500%2C500&amp;ssl=1 500w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=1200%2C1200&amp;ssl=1 1200w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=400%2C400&amp;ssl=1 400w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=800%2C800&amp;ssl=1 800w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=200%2C200&amp;ssl=1 200w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=57%2C57&amp;ssl=1 57w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=72%2C72&amp;ssl=1 72w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=114%2C114&amp;ssl=1 114w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=144%2C144&amp;ssl=1 144w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?resize=96%2C96&amp;ssl=1 96w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?w=1476&amp;ssl=1 1476w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubcheck-02.png?w=1020&amp;ssl=1 1020w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/a><\/p>\n<h3>FIN<\/h3>\n<p>Whether you use the website or the R package, it&#8217;d be a good idea to check on your SSH keys at least annually.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I came across a neat site that uses a Golang wasm function called from javascript on the page to help you see if your GitHub public SSH keys are &#8220;safe&#8221;. What does &#8220;safe&#8221; mean? This is what the function checks for (via that site): Recommended key sizes are as follows: For the RSA algorithm at [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[91],"tags":[],"class_list":["post-13398","post","type-post","status-publish","format-standard","hentry","category-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Keeping Those SSH Keys Safe - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Keeping Those SSH Keys Safe - rud.is\" \/>\n<meta property=\"og:description\" content=\"I came across a neat site that uses a Golang wasm function called from javascript on the page to help you see if your GitHub public SSH keys are &#8220;safe&#8221;. What does &#8220;safe&#8221; mean? This is what the function checks for (via that site): Recommended key sizes are as follows: For the RSA algorithm at [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-16T20:59:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01-530x338.png\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Keeping Those SSH Keys Safe\",\"datePublished\":\"2022-04-16T20:59:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/\"},\"wordCount\":341,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/pubkey-01-530x338.png\",\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/\",\"name\":\"Keeping Those SSH Keys Safe - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/pubkey-01-530x338.png\",\"datePublished\":\"2022-04-16T20:59:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/pubkey-01.png?fit=1502%2C958&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/pubkey-01.png?fit=1502%2C958&ssl=1\",\"width\":1502,\"height\":958},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/04\\\/16\\\/keeping-those-ssh-keys-safe\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Keeping Those SSH Keys Safe\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rud.is\\\/b\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\\\/\\\/rud.is\"],\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/author\\\/hrbrmstr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Keeping Those SSH Keys Safe - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/","og_locale":"en_US","og_type":"article","og_title":"Keeping Those SSH Keys Safe - rud.is","og_description":"I came across a neat site that uses a Golang wasm function called from javascript on the page to help you see if your GitHub public SSH keys are &#8220;safe&#8221;. What does &#8220;safe&#8221; mean? This is what the function checks for (via that site): Recommended key sizes are as follows: For the RSA algorithm at [&hellip;]","og_url":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/","og_site_name":"rud.is","article_published_time":"2022-04-16T20:59:54+00:00","og_image":[{"url":"https:\/\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01-530x338.png","type":"","width":"","height":""}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Keeping Those SSH Keys Safe","datePublished":"2022-04-16T20:59:54+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/"},"wordCount":341,"commentCount":4,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01-530x338.png","articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/","url":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/","name":"Keeping Those SSH Keys Safe - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01-530x338.png","datePublished":"2022-04-16T20:59:54+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?fit=1502%2C958&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/04\/pubkey-01.png?fit=1502%2C958&ssl=1","width":1502,"height":958},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2022\/04\/16\/keeping-those-ssh-keys-safe\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Keeping Those SSH Keys Safe"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-3u6","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":2973,"url":"https:\/\/rud.is\/b\/2014\/05\/04\/rforecastio-package-update-1-1-0\/","url_meta":{"origin":13398,"position":0},"title":"Rforecastio Package Update (1.1.0)","author":"hrbrmstr","date":"2014-05-04","format":false,"excerpt":"I've bumped up the version number of `Rforecastio` ([github](https:\/\/github.com\/hrbrmstr\/Rforecastio)) to `1.1.0`. The new features are: - removing the SSL certificate bypass check (it doesn't need it anymore) - using `plyr` for easier conversion of JSON-\\>data frame - adding in a new `daily` forecast data frame - roxygen2 inline documentation library(Rforecastio)\u2026","rel":"","context":"In &quot;Development&quot;","block_context":{"text":"Development","link":"https:\/\/rud.is\/b\/category\/development\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12869,"url":"https:\/\/rud.is\/b\/2021\/01\/08\/safety-checking-locally-installed-package-urls\/","url_meta":{"origin":13398,"position":1},"title":"Safety Checking Locally Installed Package URLs","author":"hrbrmstr","date":"2021-01-08","format":false,"excerpt":"I went completely daft this week and broke my months-long Twitter break due to the domestic terror event in my nation's capitol. I'll likely be resuming the break starting today. Whilst keeping up with the final descent of the U.S. into a fully failed state, I also noticed that a\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11837,"url":"https:\/\/rud.is\/b\/2019\/01\/30\/quick-hit-using-seymour-to-subscribe-to-your-gitlahub-repo-issues-in-feedly\/","url_meta":{"origin":13398,"position":2},"title":"Quick Hit: Using seymour to Subscribe to your Git[la|hu]b Repo Issues in Feedly","author":"hrbrmstr","date":"2019-01-30","format":false,"excerpt":"The seymour? Feedly API package has been updated to support subscribing to RSS\/Atom feeds. Previously the package was intended to just treat your Feedly as a data source, but there was a compelling use case for enabling subscription support: subscribing to code repository issues. Sure, there's already email notice integration\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4547,"url":"https:\/\/rud.is\/b\/2016\/07\/24\/mid-year-r-packages-update-summary\/","url_meta":{"origin":13398,"position":3},"title":"Mid-year R Packages Update Summary","author":"hrbrmstr","date":"2016-07-24","format":false,"excerpt":"I been updating some existing packages and github-releasing new ones (before a CRAN push). Most are \"cyber\"-related, but there are some general purpose ones. Here's a quick overview: docxtractr (CRAN, now, v0.2.0) was initially designed to make it easy to get data tables out of MS Word (docx) documents. The\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3482,"url":"https:\/\/rud.is\/b\/2015\/06\/29\/get-by-with-a-little-r-help-from-your-friends-at-github\/","url_meta":{"origin":13398,"position":4},"title":"Get by with a little (R) help from your friends (at GitHub)","author":"hrbrmstr","date":"2015-06-29","format":false,"excerpt":"@JennyBryan posted her [slides from the 2015 R Summit](https:\/\/github.com\/jennybc\/2015-06-28_r-summit-talk) and they are a must-read for instructors and even general stats\/R-folk. She's one of the foremost experts in R+GitHub and her personal and class workflows provide solid patterns worth emulation. One thing she has mentioned a few times\u2014and included in her\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":14213,"url":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/","url_meta":{"origin":13398,"position":5},"title":"New R Package For HTTP Headers Hashing","author":"hrbrmstr","date":"2023-07-09","format":false,"excerpt":"HTTP Headers Hashing (HHHash) is a technique developed by Alexandre Dulaunoy to gen\u00aderate a fingerprint of an HTTP server based on the headers it returns. It employs one-way hashing to generate a hash value from the list of header keys returned by the server. The HHHash value is calculated by\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/13398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=13398"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/13398\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=13398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=13398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=13398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}