SlideShare a Scribd company logo
1 of 45
Download to read offline
Ruby TOTP
• Ruby
• IIJ SmartKey *1
iOS
*1
"IIJ SmartKey ". h1p://
www.iij.ad.jp/smartkey/
iOS D !
• D
• h$p://hioki-daichi.jp/passwordd.html
•
• h$ps://github.com/hioki-daichi/
passwordd
otpauth://totp/
github.com/hioki-daichi
?issuer=GitHub
&secret=njjlrjgljcebmj6l
otpauth://totp/
github.com/hioki-daichi
?issuer=GitHub
&secret=njjlrjgljcebmj6l
njjlrjgljcebmj6l
! 165853
" 372144
# 770782
...
Ruby ✨
hmac = OpenSSL::HMAC.digest(
OpenSSL::Digest.new('sha1'),
Base32.decode('NJJLRJGLJCEBMJ6L'),
[Time.now.to_i / 30].pack('N*').rjust(8, 0.chr)
)
#=> "nxEAxD6xBFxFBxA1xA6xB2x128
# x1AxB0x8Dx1DRxD4x8FxE6xD5xAE"
hmac.unpack('[H*]').pop
#=> "6eead6bffba1a6b212381ab08d1d52d48fe6d5ae"
-------------------------------------------------------------
|6e|ea|d6|bf|fb|a1|a6|b2|12|38|1a|b0|8d|1d|52|d4|8f|e6|d5|ae|
------------------------------------------------------------|
offset = hmac[-1].ord & 0xf
code = (hmac[offset ].ord & 0x7f) << 24 |
(hmac[offset + 1].ord & 0xff) << 16 |
(hmac[offset + 2].ord & 0xff) << 8 |
(hmac[offset + 3].ord & 0xff)
(code % 10 ** 6).to_s.rjust(6, '0')
#=> "662182"
-------------------------------------------------------------
|6e|ea|d6|bf|fb|a1|a6|b2|12|38|1a|b0|8d|1d|52|d4|8f|e6|d5|ae|
-------------------------------------------***********----++|
0xae & 0xf #=> 14
0x52d48fe6 #=> 1389662182
~~~~~~
otpauth://totp/
github.com/hioki-daichi
?issuer=GitHub
&secret=njjlrjgljcebmj6l
otpauth://totp/
github.com/hioki-daichi
?issuer=GitHub
&secret=njjlrjgljcebmj6l
&algorithm=SHA256
&digits=8
&period=10
Key Uri Format*2
*2
"Key Uri Format · google/google-authen8cator Wiki". GitHub. h@ps://github.com/google/google-authen8cator/
wiki/Key-Uri-Format
Type
REQUIRED
otpauth://totp/ACME%20Co:john.doe@email.com?
secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=AC
ME%20Co&algorithm=SHA1&digits=6&period=30
• totp / hotp
Label
REQUIRED
otpauth://totp/ACME%20Co:john.doe@email.com?
secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=AC
ME%20Co&algorithm=SHA1&digits=6&period=30
• secret
• "#{issuer}:#{accountname}" !
Secret
REQUIRED
otpauth://totp/ACME%20Co:john.doe@email.com?
secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=A
CME%20Co&algorithm=SHA1&digits=6&period=30
• 128 160
• Base32 stesla/base32*3
*3
"stesla/base32: A library which provides base32 decoding and encoding.".GitHub. h?ps://github.com/stesla/base32
Issuer
STRONGLY RECOMMENDED
otpauth://totp/ACME%20Co:john.doe@email.com?
secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=AC
ME%20Co&algorithm=SHA1&digits=6&period=30
• Label
• Label Parameters !
Algorithm
OPTIONAL
otpauth://totp/ACME%20Co:john.doe@email.com?
secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=AC
ME%20Co&algorithm=SHA1&digits=6&period=30
• SHA1 (Default) / SHA256 / SHA512
Digits
OPTIONAL
otpauth://totp/ACME%20Co:john.doe@email.com?
secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=AC
ME%20Co&algorithm=SHA1&digits=6&period=30
• 6 (Default) / 8
• 6 10 ** 6
Period
OPTIONAL
otpauth://totp/ACME%20Co:john.doe@email.com?
secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=AC
ME%20Co&algorithm=SHA1&digits=6&period=30
• 30
HOTP
OTP
!
Gem !
mdp/rotp*4
totp = ROTP::TOTP.new(
"BASE32SECRET3232",
interval: 60, issuer: "ACME Co",
digits: 8, digest: "sha256"
)
#=> #<ROTP::TOTP:0x007fde9244c028
# @interval=60, @issuer="ACME Co",
# @digits=8, @digest="sha256",
# @secret="BASE32SECRET3232">
*4
"mdp/rotp: Ruby One Time Password library".GitHub h?ps://github.com/mdp/rotp
mdp/rotp*4
totp.now
#=> "24430035"
totp.provisioning_uri("john.doe@email.com")
#=> "otpauth://totp/
# ACME%20Co:john.doe@email.com
# ?secret=BASE32SECRET3232
# &period=60
# &issuer=ACME+Co&digits=8"
*4
"mdp/rotp: Ruby One Time Password library".GitHub h?ps://github.com/mdp/rotp
mdp/rotp*4
totp.verify("24430035")
#=> false
totp.verify_with_drift("24430035", 10)
#=> true
*4
"mdp/rotp: Ruby One Time Password library".GitHub h?ps://github.com/mdp/rotp
TOTP
!
•
• e.g. SMS
SMS
QR !
QR
• UI
!
( )
• ( )
!
secret
• SecureRandom
IIJ SmartKey *5
*5
"IIJ SmartKey ". h1p://www.iij.ad.jp/biz/smartkey-m/
②
$ curl $API_ENDPOINT/apps/$APP_ID/accounts/$ACCOUNT_ID/notifications
-X POST
-H 'Content-Type: application/json'
-H 'X-Iij-Smart-Key-Api-Key: $API_KEY'
-d '{
"title":"GitHub ",
"message":"GitHub ",
"push_notification_title":" ",
"push_notification_message":" "
}'
⑥
$ curl $API_ENDPOINT/apps/$APP_ID/accounts/$ACCOUNT_ID/notifications
...
{
"key":"b89609af119c3a94fb05b60c15bb8807",
"account_code":"728f190fa43069c449411ecef22b550cd0a1edbf",
"title":"GitHub ",
"message":"GitHub ",
"status":"verified",
"notified_at":"2016-06-16T00:00:00.000+09:00"
}
• RFC6238
• TOTP: Time-Based One-Time Password Algorithm
• h?ps://tools.ieC.org/html/rfc6238
• RFC4226
• HOTP: An HMAC-Based One-Time Password Algorithm
• h?ps://tools.ieC.org/html/rfc4226
• RFC2104
• HMAC: Keyed-Hashing for Message AuthenNcaNon
• h?ps://tools.ieC.org/html/rfc2104
• RFC4648
• The Base16, Base32, and Base64 Data Encodings
• h?ps://tools.ieC.org/html/rfc4648

More Related Content

Similar to Ruby で覚える TOTP

スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化
スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化
スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化Taro Matsuzawa
 
Coqによる証明駆動開発
Coqによる証明駆動開発Coqによる証明駆動開発
Coqによる証明駆動開発Hiroki Mizuno
 
Introduction to hubot
Introduction to hubotIntroduction to hubot
Introduction to hubotTencent
 
Introduction to hubot
Introduction to hubotIntroduction to hubot
Introduction to hubotdcshi
 
アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編
アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編
アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編Hiroki Ohtsuka
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02Hiroshi SHIBATA
 
20160708 データ処理のプラットフォームとしてのpython 札幌
20160708 データ処理のプラットフォームとしてのpython 札幌20160708 データ処理のプラットフォームとしてのpython 札幌
20160708 データ処理のプラットフォームとしてのpython 札幌Ryuji Tamagawa
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Yohei Yasukawa
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたTaro Matsuzawa
 
リバースプロキシで webサーバを集約 ついでにdocker化しよう
リバースプロキシでwebサーバを集約ついでにdocker化しようリバースプロキシでwebサーバを集約ついでにdocker化しよう
リバースプロキシで webサーバを集約 ついでにdocker化しようYasunori Kuji
 
Getting Started with Go
Getting Started with GoGetting Started with Go
Getting Started with GoSteven Francia
 
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스Rhio Kim
 
月刊ライトニングトーク 2014/06-07: 前回からのダイジェスト
月刊ライトニングトーク 2014/06-07: 前回からのダイジェスト月刊ライトニングトーク 2014/06-07: 前回からのダイジェスト
月刊ライトニングトーク 2014/06-07: 前回からのダイジェストSeiya Konno
 
Giving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSGiving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSMadhava Jay
 
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Hiroki Mizuno
 
Sinatraで触れる生SQL
Sinatraで触れる生SQLSinatraで触れる生SQL
Sinatraで触れる生SQLtreby
 
Charles nutter star techconf 2011 - jvm languages
Charles nutter   star techconf 2011 - jvm languagesCharles nutter   star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languagesStarTech Conference
 
plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6Nobuo Danjou
 

Similar to Ruby で覚える TOTP (20)

スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化
スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化
スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化
 
Coqによる証明駆動開発
Coqによる証明駆動開発Coqによる証明駆動開発
Coqによる証明駆動開発
 
Introduction to hubot
Introduction to hubotIntroduction to hubot
Introduction to hubot
 
Introduction to hubot
Introduction to hubotIntroduction to hubot
Introduction to hubot
 
アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編
アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編
アジャイルな開発をチームで やってみた(2010年版) - PHP Matsuri編
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
 
20160708 データ処理のプラットフォームとしてのpython 札幌
20160708 データ処理のプラットフォームとしてのpython 札幌20160708 データ処理のプラットフォームとしてのpython 札幌
20160708 データ処理のプラットフォームとしてのpython 札幌
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
 
リバースプロキシで webサーバを集約 ついでにdocker化しよう
リバースプロキシでwebサーバを集約ついでにdocker化しようリバースプロキシでwebサーバを集約ついでにdocker化しよう
リバースプロキシで webサーバを集約 ついでにdocker化しよう
 
Github basics
Github basicsGithub basics
Github basics
 
Getting Started with Go
Getting Started with GoGetting Started with Go
Getting Started with Go
 
Macruby intro
Macruby introMacruby intro
Macruby intro
 
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
 
月刊ライトニングトーク 2014/06-07: 前回からのダイジェスト
月刊ライトニングトーク 2014/06-07: 前回からのダイジェスト月刊ライトニングトーク 2014/06-07: 前回からのダイジェスト
月刊ライトニングトーク 2014/06-07: 前回からのダイジェスト
 
Giving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSGiving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOS
 
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
 
Sinatraで触れる生SQL
Sinatraで触れる生SQLSinatraで触れる生SQL
Sinatraで触れる生SQL
 
Charles nutter star techconf 2011 - jvm languages
Charles nutter   star techconf 2011 - jvm languagesCharles nutter   star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languages
 
plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6
 

Recently uploaded

Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Recently uploaded (20)

Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

Ruby で覚える TOTP