{"id":25046,"date":"2025-11-24T19:24:04","date_gmt":"2025-11-24T19:24:04","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=25046"},"modified":"2025-11-24T19:24:04","modified_gmt":"2025-11-24T19:24:04","slug":"native-secure-enclaved-backed-ssh-keys-on-macos-%c2%b7-github","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/25046\/","title":{"rendered":"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub"},"content":{"rendered":"\n<\/p>\n<div id=\"\">\n<p dir=\"auto\">It turns out that MacOS Tahoe can generate and use secure-enclave backed SSH keys! This replaces projects like <a target=\"_blank\" href=\"https:\/\/github.com\/maxgoedjen\/secretive\">https:\/\/github.com\/maxgoedjen\/secretive<\/a><\/p>\n<p dir=\"auto\">There is a shared library <code>\/usr\/lib\/ssh-keychain.dylib<\/code> that traditionally has been used to add smartcard support<br \/>\nto ssh by implementing <code>PKCS11Provider<\/code> interface. However since recently it also implements <code>SecurityKeyProivder<\/code><br \/>\nwhich supports loading keys directly from the secure enclave! <code>SecurityKeyProvider<\/code> is what is normally used to talk to FIDO2 devices (e.g. <code>libfido2<\/code> can be used to talk to your Yubikey). However you can now use it to talk to your Secure Enclave instead!<\/p>\n<details open=\"\" class=\"details-reset border rounded-2\">\n<summary class=\"px-3 py-2\">\n    <svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-device-camera-video\">\n    <path d=\"M16 3.75v8.5a.75.75 0 0 1-1.136.643L11 10.575v.675A1.75 1.75 0 0 1 9.25 13h-7.5A1.75 1.75 0 0 1 0 11.25v-6.5C0 3.784.784 3 1.75 3h7.5c.966 0 1.75.784 1.75 1.75v.675l3.864-2.318A.75.75 0 0 1 16 3.75Zm-6.5 1a.25.25 0 0 0-.25-.25h-7.5a.25.25 0 0 0-.25.25v6.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-6.5ZM11 8.825l3.5 2.1v-5.85l-3.5 2.1Z\"\/>\n<\/svg><br \/>\n    <span class=\"m-1\">recording.mov<\/span><br \/>\n    <span class=\"dropdown-caret\"\/><br \/>\n  <\/summary>\n<p>  <video src=\"https:\/\/private-user-images.githubusercontent.com\/628387\/517875041-ff033694-13e1-454e-b42b-b5c19e0fb2a0.mov?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjQwMTI1NDEsIm5iZiI6MTc2NDAxMjI0MSwicGF0aCI6Ii82MjgzODcvNTE3ODc1MDQxLWZmMDMzNjk0LTEzZTEtNDU0ZS1iNDJiLWI1YzE5ZTBmYjJhMC5tb3Y_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUxMTI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MTEyNFQxOTI0MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMmUzOTRiZTA5NmFlODFmNTNhMDgyYTQ1ODY5MTNjZTVjZWFkYWIzNjhkNjk5OTQ5YzQ0NGNkNWM2YjQ3NTI4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.nwGAGGMlTbp_EwFx02Ci8Eqh1HqwTiCwjw757S1c3g4\" data-canonical-src=\"https:\/\/private-user-images.githubusercontent.com\/628387\/517875041-ff033694-13e1-454e-b42b-b5c19e0fb2a0.mov?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjQwMTI1NDEsIm5iZiI6MTc2NDAxMjI0MSwicGF0aCI6Ii82MjgzODcvNTE3ODc1MDQxLWZmMDMzNjk0LTEzZTEtNDU0ZS1iNDJiLWI1YzE5ZTBmYjJhMC5tb3Y_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUxMTI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MTEyNFQxOTI0MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMmUzOTRiZTA5NmFlODFmNTNhMDgyYTQ1ODY5MTNjZTVjZWFkYWIzNjhkNjk5OTQ5YzQ0NGNkNWM2YjQ3NTI4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.nwGAGGMlTbp_EwFx02Ci8Eqh1HqwTiCwjw757S1c3g4\" controls=\"controls\" muted=\"muted\" class=\"d-block rounded-bottom-2 border-top width-fit\" style=\"max-height:640px; min-height: 200px\"><\/p>\n<p>  <\/video><br \/>\n<\/details>\n<p dir=\"auto\">Seems this method was first discovered in <a target=\"_blank\" href=\"https:\/\/lists.mindrot.org\/pipermail\/openssh-unix-dev\/2024-July\/041451.html\" rel=\"nofollow\">https:\/\/lists.mindrot.org\/pipermail\/openssh-unix-dev\/2024-July\/041451.html<\/a><\/p>\n<p dir=\"auto\">See <code>man sc_auth<\/code> and <code>man ssh-keychain<\/code> for all the options<\/p>\n<p dir=\"auto\">To create a Secure Enclave backed key that requires biometrics, run the<br \/>\nfollowing command and press TouchID:<\/p>\n<pre><code>% sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio\n<\/code><\/pre>\n<p dir=\"auto\">You can confirm that the key was create with the <code>list-ctk-identities<\/code> command:<\/p>\n<pre><code>arian@Mac ssh-keychain % sc_auth  list-ctk-identities       \nKey Type Public Key Hash                          Prot Label Common Name Email Address Valid To        Valid \np-256-ne A71277F0BC5825A7B3576D014F31282A866EF3BC bio  ssh   ssh                       23.11.26, 17:09 YES\n<\/code><\/pre>\n<p dir=\"auto\">It also supports listing the ssh key fingerprints instead:<\/p>\n<pre><code>% sc_auth  list-ctk-identities -t ssh\nKey Type Public Key Hash                                    Prot Label Common Name Email Address Valid To        Valid \np-256-ne SHA256:vs4ByYo+T9M3V8iiDYONMSvx2k5Fj2ujVBWt1j6yzis bio  ssh   ssh                       23.11.26, 17:09 YES \n<\/code><\/pre>\n<p dir=\"auto\">Keys can be deleted with<\/p>\n<pre><code>% sc_auth delete-ctk-identity -h <public key=\"\" hash=\"\">\n<\/public><\/code><\/pre>\n<p dir=\"auto\">You can &#8220;download&#8221; the public \/ private keypair from the secure enclave using the following command:<\/p>\n<pre><code>% ssh-keygen -w \/usr\/lib\/ssh-keychain.dylib -K -N \"\"\nEnter PIN for authenticator: \nYou may need to touch your authenticator to authorize key download.\nSaved ECDSA-SK key to id_ecdsa_sk_rk\n% cat id_ecdsa_sk_rk.pub \nsk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBKiHAiAZhcsZ95n85dkNGs9GnbDt0aNOia2gnuknYV2wKL3y0u+d3QrE9cFkmWXIymHZMglL+uJA+6mShY8SeykAAAAEc3NoOg== ssh:\n<\/code><\/pre>\n<p dir=\"auto\">You can just use the empty string for PIN. For some reason <code>openssh<\/code> always asks for<br \/>\nit even if the authenticator in question does not use a PIN but a biometric.<br \/>\nNote that the &#8220;private&#8221; key here is just a reference to the FIDO credential. It does<br \/>\nnot contain any secret key material. Hence I&#8217;m specifiyng <code>-N \"\"<\/code> to skip an encryption<br \/>\npassphrase.<\/p>\n<p dir=\"auto\">Now if you copy this public key to your authorized keys file, it should work!<\/p>\n<pre><code>% ssh-copy-id -i id_ecdsa_sk_rk localhost\n% ssh -o SecurityKeyProvider=\/usr\/lib\/ssh-keychain.dylib localhost\n<\/code><\/pre>\n<p dir=\"auto\">Instead of downloading the public\/private keypair to a file you can also directly<br \/>\nmake the keys available to <code>ssh-agent<\/code>. For this you can use the following command:<\/p>\n<pre><code>% ssh-add -K -S \/usr\/lib\/ssh-keychain.dylib\nEnter PIN for authenticator: \nResident identity added: ECDSA-SK SHA256:vs4ByYo+T9M3V8iiDYONMSvx2k5Fj2ujVBWt1j6yzis\n% ssh-add -L\nsk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBKiHAiAZhcsZ95n85dkNGs9GnbDt0aNOia2gnuknYV2wKL3y0u+d3QrE9cFkmWXIymHZMglL+uJA+6mShY8SeykAAAAEc3NoOg== \n% ssh-copy-id localhost\n% ssh -o SecurityKeyProvider=\/usr\/lib\/ssh-keychain.dylib localhost\n<\/code><\/pre>\n<div class=\"markdown-heading\" dir=\"auto\">\n<h2 class=\"heading-element\" dir=\"auto\">Using the SecurityKeyProvider by default<\/h2>\n<p><a target=\"_blank\" id=\"user-content-using-the-securitykeyprovider-by-default\" class=\"anchor\" aria-label=\"Permalink: Using the SecurityKeyProvider by default\" href=\"#using-the-securitykeyprovider-by-default\"><svg class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\/><\/svg><\/a><\/div>\n<p dir=\"auto\"><code>SecurityKeyProvider<\/code> can be configured in <code>.ssh\/config<\/code> but I recommend setting<br \/>\n<code>export SSH_SK_PROVIDER=\/usr\/lib\/ssh-keychain.dylib<\/code> in your <code>.zprofile<\/code> instead as<br \/>\nthat environment variable gets picked up by <code>ssh<\/code>, <code>ssh-add<\/code> and <code>ssh-keygen<\/code>.<\/p>\n<p dir=\"auto\">This means you can just do:<\/p>\n<pre><code>ssh-add -K\nssh my-server\n<\/code><\/pre>\n<p dir=\"auto\">or<\/p>\n<pre><code>ssh-keygen -K\nssh -i id_ecdsa_rk_sk my-server\n<\/code><\/pre>\n<p dir=\"auto\">to ssh into your server<\/p>\n<p dir=\"auto\">There&#8217;s also an exportable variant where the private key is encrypted using the secure enclave as opposed to generated on the secure enclave. This is might be considered less secure but is convenient for key backup.<\/p>\n<pre><code>% sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio\n% sc_auth list-ctk-identities\np-256    A581E5404ED157C4C73FFDBDFC1339E0D873FCAE bio  ssh-exportable ssh-exportable               23.11.26, 19:50 YES  \n% sc_auth export-ctk-identity -h A581E5404ED157C4C73FFDBDFC1339E0D873FCAE -f ssh-exportable.pem\nEnter a password which will be used to protect the exported items:\nVerify password:\n<\/code><\/pre>\n<p dir=\"auto\">You can then re-import it on another device<\/p>\n<pre><code>% sc_auth import-ctk-identities -f ssh-exportable.pem.p12 -t bio\nEnter PKCS12 file password:\n<\/code><\/pre>\n<\/div>\n\n<br \/><a href=\"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"It turns out that MacOS Tahoe can generate and use secure-enclave backed SSH keys! This replaces projects like [&hellip;]","protected":false},"author":1,"featured_media":25047,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-25046","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub - \u30dd\u30b1\u30b3\u30f3<\/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:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"It turns out that MacOS Tahoe can generate and use secure-enclave backed SSH keys! This replaces projects like [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-24T19:24:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/gist-og-image-54fd7dc0713e.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/25046\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub\",\"datePublished\":\"2025-11-24T19:24:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/25046\\\/\"},\"wordCount\":366,\"image\":{\"@id\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/gist-og-image-54fd7dc0713e.png\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/25046\\\/\",\"url\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf\",\"name\":\"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/gist-og-image-54fd7dc0713e.png\",\"datePublished\":\"2025-11-24T19:24:04+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/gist-og-image-54fd7dc0713e.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/gist-og-image-54fd7dc0713e.png\",\"width\":1280,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gist.github.com\\\/arianvp\\\/5f59f1783e3eaf1a2d4cd8e952bb4acf#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub - \u30dd\u30b1\u30b3\u30f3","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:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf","og_locale":"ja_JP","og_type":"article","og_title":"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub - \u30dd\u30b1\u30b3\u30f3","og_description":"It turns out that MacOS Tahoe can generate and use secure-enclave backed SSH keys! This replaces projects like [&hellip;]","og_url":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-11-24T19:24:04+00:00","og_image":[{"width":1280,"height":640,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/gist-og-image-54fd7dc0713e.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"3\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/25046\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub","datePublished":"2025-11-24T19:24:04+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/25046\/"},"wordCount":366,"image":{"@id":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/gist-og-image-54fd7dc0713e.png","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/25046\/","url":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf","name":"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage"},"image":{"@id":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/gist-og-image-54fd7dc0713e.png","datePublished":"2025-11-24T19:24:04+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/gist-og-image-54fd7dc0713e.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/gist-og-image-54fd7dc0713e.png","width":1280,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/gist.github.com\/arianvp\/5f59f1783e3eaf1a2d4cd8e952bb4acf#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Native Secure Enclaved backed ssh keys on MacOS \u00b7 GitHub"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/25046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=25046"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/25046\/revisions"}],"predecessor-version":[{"id":25048,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/25046\/revisions\/25048"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/25047"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=25046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=25046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=25046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}