{"id":9632,"date":"2020-12-10T14:25:18","date_gmt":"2020-12-10T13:25:18","guid":{"rendered":"https:\/\/www.credativ.de\/blog\/credativ-inside\/create-qr-codes-for-totp-secrets\/"},"modified":"2025-11-21T09:59:34","modified_gmt":"2025-11-21T08:59:34","slug":"create-qr-codes-for-totp-secrets","status":"publish","type":"post","link":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/","title":{"rendered":"Create QR Codes for TOTP Secrets"},"content":{"rendered":"<p>The article <a href=\"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/two-factor-authentication-for-openssh-and-openvpn\/\">Two-factor authentication for OpenSSH and OpenVPN<\/a> presented a simple way to increase the security of PAM-enabled services through two-factor authentication. The TOTP method used generates a one-time password that is valid for a limited period of time based on a <em>shared secret<\/em>.<\/p>\n<p>Depending on the method and encoding, the shared secret consists of 32 or even 40 characters that must be communicated to the user. QR codes have become established as a convenient and fault-tolerant solution for this, which can be read with suitable apps. However, these QR codes often contain additional, superfluous information that allows conclusions to be drawn about the account.  <\/p>\n<p>This article takes a look at the structure of the content of such QR codes and how they can still be used securely.<\/p>\n<h2 id=\"fallstricke\">Pitfalls<\/h2>\n<p>In his article <a href=\"https:\/\/medium.com\/crypto-punks\/why-you-shouldnt-scan-two-factor-authentication-qr-codes-e2a44876a524\" target=\"_blank\" rel=\"noopener\">Why you shouldn\u2019t scan two-factor authentication QR codes<\/a>, Sam Aiken constructs interesting scenarios and advises against the thoughtless use of QR codes for transmitting the shared secret in 2FA.<\/p>\n<p>In addition to the shared secret, most QR codes also contain information about the service provider, the service itself, and usernames. If an attacker obtains this information \u2013 be it through the QR code itself or because the app used stores its data unsecured locally or in the cloud, or loses it otherwise \u2013 he only needs to obtain the account password to use the service under a false name. <\/p>\n<p>The user is, of course, free to delete or modify this additional information, but according to Aiken, this is not possible in all apps: some apps did not allow changes, while others offered the possibility to make changes but remembered the originally read values, so that unnecessary information could be disclosed here as well. Aiken also criticizes that many services only displayed QR codes, but not the shared secret as a string, which would give the user full control over the data entered into an app. <\/p>\n<p>In addition to using a recommended app in this regard, such as <a href=\"https:\/\/github.com\/andOTP\/andOTP\">andOTP<\/a>, whose use admins can influence but not always prescribe, it would therefore be desirable if QR codes contained only the essential information from the outset anyway.<\/p>\n<h2 id=\"uri-schema\">URI Scheme<\/h2>\n<p>The content of such a QR code ultimately corresponds to a URI, such as the one Google uses for its Authenticator app at <a href=\"https:\/\/github.com\/google\/google-authenticator\/wiki\/Key-Uri-Format\" target=\"_blank\" rel=\"noopener\">Github<\/a>:<\/p>\n<pre>otpauth:\/\/TYPE\/LABEL?PARAMETERS<\/pre>\n<p>The placeholder <em>TYPE<\/em> indicates whether the method used is <a href=\"https:\/\/tools.ietf.org\/html\/rfc4226\" target=\"_blank\" rel=\"noopener\">HOTP<\/a> or, as in our case, <a href=\"https:\/\/tools.ietf.org\/html\/rfc6238\" target=\"_blank\" rel=\"noopener\">TOTP<\/a>; <em>LABEL<\/em>, according to the specification, should contain information about the issuer and user account; <em>PARAMETERS<\/em> can contain additional information besides the required <em>secret<\/em>.<\/p>\n<table width=\"100%\">\n<thead>\n<tr class=\"header\">\n<th width=\"25%\">Parameter<\/th>\n<th width=\"50%\">Description<\/th>\n<th width=\"25%\">Default<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td>secret<\/td>\n<td>Shared Secret in Base32 encoding<\/td>\n<td>&#8211;<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>counter<\/td>\n<td>Counter value for HOTP<\/td>\n<td>&#8211;<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>issuer<\/td>\n<td>Issuer<\/td>\n<td>&#8211;<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>algorithm<\/td>\n<td>Used Hash Algorithm<\/td>\n<td>SHA1<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>digits<\/td>\n<td>Length of the generated OTP<\/td>\n<td>6<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>period<\/td>\n<td>Validity period for TOTP<\/td>\n<td>30<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Of all the options listed, according to the specification for TOTP, only <em>TYPE<\/em>, <em>LABEL<\/em>, and the <em>PARAMETER<\/em> <em>secret<\/em> are required.<\/p>\n<p>With this information, we can now create a URI for the shared secret generated for user Alice in the last article. For data economy, only the service is specified here in the label. Should Alice require further information about the service, it can be communicated to her through other means.  <\/p>\n<pre>otpauth:\/\/totp\/OpenVPN?secret=4LRW4HZQCC52QP7NIEMCIT4FXYOLWI75<\/pre>\n<p>The information contained in this URI does not allow any conclusions to be drawn about the operator, the address, or the username used for the specified service. This should be sufficiently secure for most use cases. <\/p>\n<p>Furthermore, tests with <a href=\"https:\/\/github.com\/andOTP\/andOTP\" target=\"_blank\" rel=\"noopener\">andOTP<\/a> showed that the <em>LABEL<\/em> section of a URI can also be left completely empty and still be read without problems:<\/p>\n<pre>otpauth:\/\/totp\/?secret=4LRW4HZQCC52QP7NIEMCIT4FXYOLWI75<\/pre>\n<figure><img decoding=\"async\" src=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-nolabel.png\" alt=\"Entry without Label in andOTP\" width=\"300\"><figcaption aria-hidden=\"true\">Entry without Label in andOTP<\/figcaption><\/figure>\n<h2 id=\"qr-code-erzeugen\">Generate QR Code<\/h2>\n<p>To convert the URI you just created into a QR code, you can use the command line tool <a href=\"https:\/\/fukuchi.org\/works\/qrencode\/\" target=\"_blank\" rel=\"noopener\">qrencode<\/a>. The codes can be written to an image file or displayed directly as <a href=\"https:\/\/de.wikipedia.org\/wiki\/ASCII-Art\" target=\"_blank\" rel=\"noopener\">ASCII art <\/a>on the command line:<\/p>\n<pre>$ qrencode -t ANSI 'otpauth:\/\/totp\/OpenVPN?secret=4LRW4HZQCC52QP7NIEMCIT4FXYOLWI75'<\/pre>\n<p>Strictly speaking, <code>-t ANSI<\/code> ANSI art is generated here by the argument, because so-called <a href=\"https:\/\/de.wikipedia.org\/wiki\/Rahmenzeichen\" target=\"_blank\" rel=\"noopener\">border characters<\/a> are used in the output, which do not appear in the original ASCII character set. Although an output in true ASCII art can be generated using <code>-t ASCII<\/code>, the graphic consists only of <code>#<\/code> and spaces, which is much harder to recognize and thus unnecessarily complicates reading with a smartphone. <\/p>\n<p>If an image file is to be generated instead, the output format is set to PNG with <code>-t PNG<\/code> and the name of the output file is specified using <code>-o qr-alice.png<\/code>:<\/p>\n<pre>$ qrencode -t PNG -o qr-alice.png -s 10 'otpauth:\/\/totp\/OpenVPN?secret=4LRW4HZQCC52QP7NIEMCIT4FXYOLWI75'<\/pre>\n<p>The argument <code>-s 10<\/code> is optional here and serves only to increase the size of a dot in the output file from three to ten pixels:<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/qr-alice.png\" alt=\"The generated file qr-alice.png\"><figcaption aria-hidden=\"true\">The generated file  <code>qr-alice.png<\/code><\/figcaption><\/figure>\n<h2 id=\"eintrag-bearbeiten\">Edit Entry<\/h2>\n<p>Should Alice want to record further information about her OTP, she can now enter this herself manually in her app or record it otherwise. Here too, data economy does not have to be sacrificed: for example, to distinguish between two VPN entries, it is sufficient to assign them different <em>Issuers<\/em>, such as <em>Work<\/em> and <em>Club<\/em>. In the case of andOTP, this also changes the icon, which now uses the first letter of the issuer.  <\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-before.png\" alt=\"Entry after Scan in andOTP\" width=\"300\"><figcaption aria-hidden=\"true\">Entry after Scan in andOTP<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-edit.png\" alt=\"Edit the Entry\" width=\"300\"><figcaption aria-hidden=\"true\">Edit the Entry<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-after.png\" alt=\"Entry after Editing in andOTP\" width=\"300\"><figcaption aria-hidden=\"true\">Entry after Editing in andOTP<\/figcaption><\/figure>\n<h2 id=\"fazit\">Conclusion<\/h2>\n<p>QR codes are still best suited for transmitting shared secrets to end-users. However, before blindly copying the practices of others, it is worthwhile to look behind the scenes of the standards used and to consider what information really needs to be transmitted and to practice data economy when creating your own QR codes. <\/p>\n<p>By using a flexible command-line tool like <a href=\"https:\/\/fukuchi.org\/works\/qrencode\/\" target=\"_blank\" rel=\"noopener\">qrencode<\/a>, the creation of custom QR codes could even be automated quite easily for a larger number of users.<\/p>\n<h2 id=\"unterst\u00fctzung\">Support<\/h2>\n<p>If you require support with the configuration or use of two-factor authentication, our <a href=\"https:\/\/www.credativ.de\/en\/portfolio\/support\/open-source-support-center\/\" target=\"_blank\" rel=\"noopener\">Open Source Support Center<\/a> is at your disposal &#8211; if desired, also 24 hours a day, 365 days a year.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The article Two-factor authentication for OpenSSH and OpenVPN presented a simple way to increase the security of PAM-enabled services through two-factor authentication. The TOTP method used generates a one-time password that is valid for a limited period of time based on a shared secret. Depending on the method and encoding, the shared secret consists of [&hellip;]<\/p>\n","protected":false},"author":60,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1885],"tags":[1709,1759,1764,1755,1765,1850],"class_list":["post-9632","post","type-post","status-publish","format-standard","hentry","category-howtos-en","tag-2fa-en","tag-openssh-en","tag-openvpn-en","tag-otp-en","tag-qr-en","tag-ssh-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Create QR Codes for TOTP Secrets - credativ\u00ae<\/title>\n<meta name=\"description\" content=\"Learn how QR codes help with two-factor authentication and avoid potential security risks.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create QR Codes for TOTP Secrets\" \/>\n<meta property=\"og:description\" content=\"Learn how QR codes help with two-factor authentication and avoid potential security risks.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/\" \/>\n<meta property=\"og:site_name\" content=\"credativ\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/credativDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-10T13:25:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-21T08:59:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/QR-Codes-fu\u0308r-TOTP-Secrets-erstellen-Header.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2500\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jan Bolle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bollejansson\" \/>\n<meta name=\"twitter:site\" content=\"@credativde\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jan Bolle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/\"},\"author\":{\"name\":\"Jan Bolle\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/f33560ea675ef6722c4459154b42606e\"},\"headline\":\"Create QR Codes for TOTP Secrets\",\"datePublished\":\"2020-12-10T13:25:18+00:00\",\"dateModified\":\"2025-11-21T08:59:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/\"},\"wordCount\":952,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/andOTP-nolabel.png\",\"keywords\":[\"2FA\",\"OpenSSH\",\"OpenVPN\",\"OTP\",\"QR\",\"SSH\"],\"articleSection\":[\"HowTos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#respond\"]}],\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/\",\"name\":\"Create QR Codes for TOTP Secrets - credativ\u00ae\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/andOTP-nolabel.png\",\"datePublished\":\"2020-12-10T13:25:18+00:00\",\"dateModified\":\"2025-11-21T08:59:34+00:00\",\"description\":\"Learn how QR codes help with two-factor authentication and avoid potential security risks.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/andOTP-nolabel.png\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/andOTP-nolabel.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create QR Codes for TOTP Secrets\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"name\":\"credativ GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\",\"name\":\"credativ\u00ae\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"logo\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#local-main-organization-logo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/credativDE\\\/\",\"https:\\\/\\\/x.com\\\/credativde\",\"https:\\\/\\\/mastodon.social\\\/@credativde\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/credativ-gmbh\",\"https:\\\/\\\/www.instagram.com\\\/credativ\\\/\"],\"description\":\"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\\\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.\",\"legalName\":\"credativ GmbH\",\"foundingDate\":\"2025-03-01\",\"duns\":\"316387060\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"},\"address\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#local-main-place-address\"},\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"51.1732374\",\"longitude\":\"6.392010099999999\"},\"telephone\":[\"+4921619174200\",\"08002733284\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"08002733284\",\"email\":\"vertrieb@credativ.de\"},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"},{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Saturday\",\"Sunday\"],\"opens\":\"00:00\",\"closes\":\"00:00\"}],\"email\":\"info@credativ.de\",\"areaServed\":\"D-A-CH\",\"vatID\":\"DE452151696\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/f33560ea675ef6722c4459154b42606e\",\"name\":\"Jan Bolle\",\"description\":\"Jan arbeitet seit 2020 an Projekten des Support\u2013Teams und der Internen IT, nachdem er bereits sein Praktikum im Rahmen seines Informatikstudiums bei credativ absolvierte und auch seine Bachelorarbeit zum Thema Einmalpassw\u00f6rter, Zwei\u2013Faktor\u2013Authentisierung und OpenVPN bei credativ schrieb. Bereits zu Schulzeiten interessierte er sich f\u00fcr Freie Software, Netzwerke und Telekommunikation und richtete zusammen mit Mitsch\u00fclern ein Internetcaf\u00e9 ein, auf dessen Server und Clients Debian GNU\\\/Linux seinen Dienst verrichtete.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/bollejansson\"]},{\"@type\":\"PostalAddress\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#local-main-place-address\",\"streetAddress\":\"Hennes-Weisweiler-Allee 23\",\"addressLocality\":\"M\u00f6nchengladbach\",\"postalCode\":\"41179\",\"addressRegion\":\"Deutschland\",\"addressCountry\":\"DE\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/create-qr-codes-for-totp-secrets\\\/#local-main-organization-logo\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"caption\":\"credativ\u00ae\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"M\u00f6nchengladbach\" \/>\n<meta name=\"geo.position\" content=\"51.1732374;6.392010099999999\" \/>\n<meta name=\"geo.region\" content=\"Germany\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Create QR Codes for TOTP Secrets - credativ\u00ae","description":"Learn how QR codes help with two-factor authentication and avoid potential security risks.","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:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/","og_locale":"en_US","og_type":"article","og_title":"Create QR Codes for TOTP Secrets","og_description":"Learn how QR codes help with two-factor authentication and avoid potential security risks.","og_url":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/","og_site_name":"credativ\u00ae","article_publisher":"https:\/\/www.facebook.com\/credativDE\/","article_published_time":"2020-12-10T13:25:18+00:00","article_modified_time":"2025-11-21T08:59:34+00:00","og_image":[{"width":2500,"height":300,"url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/QR-Codes-fu\u0308r-TOTP-Secrets-erstellen-Header.jpg","type":"image\/jpeg"}],"author":"Jan Bolle","twitter_card":"summary_large_image","twitter_creator":"@bollejansson","twitter_site":"@credativde","twitter_misc":{"Written by":"Jan Bolle","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#article","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/"},"author":{"name":"Jan Bolle","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/f33560ea675ef6722c4459154b42606e"},"headline":"Create QR Codes for TOTP Secrets","datePublished":"2020-12-10T13:25:18+00:00","dateModified":"2025-11-21T08:59:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/"},"wordCount":952,"commentCount":0,"publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-nolabel.png","keywords":["2FA","OpenSSH","OpenVPN","OTP","QR","SSH"],"articleSection":["HowTos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#respond"]}],"copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/www.credativ.de\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/","url":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/","name":"Create QR Codes for TOTP Secrets - credativ\u00ae","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#primaryimage"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-nolabel.png","datePublished":"2020-12-10T13:25:18+00:00","dateModified":"2025-11-21T08:59:34+00:00","description":"Learn how QR codes help with two-factor authentication and avoid potential security risks.","breadcrumb":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#primaryimage","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-nolabel.png","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/12\/andOTP-nolabel.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.credativ.de\/en\/"},{"@type":"ListItem","position":2,"name":"Create QR Codes for TOTP Secrets"}]},{"@type":"WebSite","@id":"https:\/\/www.credativ.de\/en\/#website","url":"https:\/\/www.credativ.de\/en\/","name":"credativ GmbH","description":"","publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.credativ.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","Place"],"@id":"https:\/\/www.credativ.de\/en\/#organization","name":"credativ\u00ae","url":"https:\/\/www.credativ.de\/en\/","logo":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#local-main-organization-logo"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/credativDE\/","https:\/\/x.com\/credativde","https:\/\/mastodon.social\/@credativde","https:\/\/www.linkedin.com\/company\/credativ-gmbh","https:\/\/www.instagram.com\/credativ\/"],"description":"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.","legalName":"credativ GmbH","foundingDate":"2025-03-01","duns":"316387060","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"},"address":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#local-main-place-address"},"geo":{"@type":"GeoCoordinates","latitude":"51.1732374","longitude":"6.392010099999999"},"telephone":["+4921619174200","08002733284"],"contactPoint":{"@type":"ContactPoint","telephone":"08002733284","email":"vertrieb@credativ.de"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["Saturday","Sunday"],"opens":"00:00","closes":"00:00"}],"email":"info@credativ.de","areaServed":"D-A-CH","vatID":"DE452151696"},{"@type":"Person","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/f33560ea675ef6722c4459154b42606e","name":"Jan Bolle","description":"Jan arbeitet seit 2020 an Projekten des Support\u2013Teams und der Internen IT, nachdem er bereits sein Praktikum im Rahmen seines Informatikstudiums bei credativ absolvierte und auch seine Bachelorarbeit zum Thema Einmalpassw\u00f6rter, Zwei\u2013Faktor\u2013Authentisierung und OpenVPN bei credativ schrieb. Bereits zu Schulzeiten interessierte er sich f\u00fcr Freie Software, Netzwerke und Telekommunikation und richtete zusammen mit Mitsch\u00fclern ein Internetcaf\u00e9 ein, auf dessen Server und Clients Debian GNU\/Linux seinen Dienst verrichtete.","sameAs":["https:\/\/x.com\/bollejansson"]},{"@type":"PostalAddress","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#local-main-place-address","streetAddress":"Hennes-Weisweiler-Allee 23","addressLocality":"M\u00f6nchengladbach","postalCode":"41179","addressRegion":"Deutschland","addressCountry":"DE"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/create-qr-codes-for-totp-secrets\/#local-main-organization-logo","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","caption":"credativ\u00ae"}]},"geo.placename":"M\u00f6nchengladbach","geo.position":{"lat":"51.1732374","long":"6.392010099999999"},"geo.region":"Germany"},"_links":{"self":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/9632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/users\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/comments?post=9632"}],"version-history":[{"count":4,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/9632\/revisions"}],"predecessor-version":[{"id":10160,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/9632\/revisions\/10160"}],"wp:attachment":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media?parent=9632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/categories?post=9632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/tags?post=9632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}