SlideShare una empresa de Scribd logo
1 de 20
Tech・Ed Japan 2010
ラ゗トニングトーク




                     2010.08.25
                        ver. 1.1
                       亀渕 景司
名前: 亀渕 景司
 email: kamebuchi{at}live.jp
 twitter: @kamebuchi
 blog: http://buchizo.wordpress.com/
 略歴:
    IT業界在籍13年目
    開発、SIいろいろ渡り歩いてます
    現在はISV系IT企業で技術よりの営業支援
    みたいな、なんでも屋さん
    (コンシェルジュ)

(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   2
Credential Provider の概要
Credential Provider をカスタマ゗ズ
してみよう
Credential Provider の可能性

 注意
    紹介するネタは Microsoft 非サポートの内容
    を含みます
    実践は自己責任で!

(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   3
Windows の認証機構
以前は GINA (Graphical Identification
and Authentication) と呼ばれてたもの
    Windows NT 3.5x/4.0/2000/XP/2003
    極端に言うとログ゗ン画面や
    CTRL+ALT+DEL 押したときに出る”アレ”


Windows Vista/2008/7 は
GINA からCredential
Provider に変わりました
(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   4
GINA の場合
 サービス等が起動するセッション0に                                           セッション 0
 WinLogon が同居                                                      WinLogon.exe
 最終的に GINA が LogonUser +
                                                                        GINA (DLL)
 関連 API を呼び出して認証
 ログオンの描画も GINA で担当
   自由度高め
                                                              LSASS.exe
   統一感は無い                                                     (Local Security Authority Process)
 GINA は1つ
   チェーン化することも一応可能
   複数のベンダーによる GINA の共存が
   基本的にできない
 LoadLibrary と関数ポ゗ンタに依存



 (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.                                         5
Credential Provider の場合                                       セッション x
 サービス等が起動するセッション0と                                            LogonUI.exe
 分離                                                             Credential           Credential
 最終的に WinLogon が LogonUser +                                    Provider             Provider
 関連 API を呼び出して認証
    Credential Provider では資格情報を生成                                  WinLogon.exe
 ログオンの描画は LogonUI.exe で担当
    どの UI 要素を表示するかだけを列挙
                                                              セッション 0
    統一感あり
                                                               LSASS.exe
 Credential Provider は複数OK                                     (Local Security Authority Process)
    複数のベンダーによる多様な認証を提供可能
    排他じゃない
 COM ベースで再設計
    ゗ンターフェースの実装と登録だけでOK
 対話ログオン以外にも柔軟に対応

  (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.                                         6
(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   7
ただ弄るだけだと面白くない!
 外部 EXE の実行に挑戦!




(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   8
サンプルは Windows SDK for Windows 7 and .NET Framework 4 を
利用
    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=6b6c
    21d2-2006-4afa-9702-529fa782d63b
    “Windows SDK”で検索したほうが早い
        検索結果でみると Windows SDK 7.1 5/19/2010


゗ンストール後下記にサンプルがあります
 C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥security¥credentialproviders


Samples のドキュメントは…
    Windows Vista Credential Provider Samples
        http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=b1b3cb
        d1-2d3a-4fac-982f-289f4f4b9300


MSDN マガジンの記事が凄く分かりやすい
    Windows Vista 用の資格情報プロバ゗ダを使用したカスタム ログ゗ン機能の作成
        http://msdn.microsoft.com/ja-jp/magazine/cc163489.aspx




(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.                                9
サンプルは Visual Studio 2008
    ⇒ Visual Studio 2010 にコンバートしても問題なし
    です


今回はシンプルな
”SampleCredentialProvider” を使用

CSampleProvider.cpp 内の
CSampleProvider::SetUsageScenario に追記



(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   10
CTRL+ALT+DEL キー押下
                                                            で呼び出されます




                                                            ログオン画面とロック解除画面
                                                            の゗ベント時にEXEを呼び出し




(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.                       11
ターゲット指定は注意
    x64 と x86 で配置先やレジストリの登録が
    異なります
    ゗ンストール先のOS環境にあわせましょう




(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   12
出来上がったDLLをWindowsフォルダへコピー
レジストリを登録
    レジストリフゔ゗ルはプロジェクトフォルダに同梱
                                                    他には既定の認証プロバ゗ダや
                                                    生体認証プロバ゗ダが標準で
                                                    登録されています



                                                            見たまんまCOMですね




(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.                 13
OLE-COM Object Viewer で確認




                                                            しつこいですがCOMですね
                                                            IUnknown持ってますね



 ではログオフしてみて…

(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.                    14
(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   15
Win32 Native 以外は非サポート
    つまるところ開発は C++/COM
        COM Interop 使ってマネージドコードで実装したりするのは
        非サポート(動作はする)
        COM の知識があればもっと楽しい♪
    C++ な COM から外部EXE呼び出したりするのは…
Credential Provider はビジュゕルスタ゗ルが
利用できません
    Aero Glass、テーマ等
リモートデスクトップ接続時も有効です
Samples 文書の Q&A に詳細が記載されてます
いろいろ失敗したらあわてずセーフモードで
    復旧方法もドキュメントに記載あります

(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   16
企業向け
    ログオン前にいろいろ情報表示
        企業からの通知の表示
        ログオン日時、ネットワーク接続情報、等
    Office Communicator と組み合わせてヘルプ
    デスクに接続
        ログオン前でも対応できる
    ログオン画面で RDC
        ログオンせずにリモートデスクトップ接続
        mstsc.exe を呼び出すだけで良いなら意外と簡単


(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   17
Windows 7 なら Sensor API と連携
        3軸加速度センサー使って特定の動きしたらログオン
        ▪ 変身ポーズでログオン!
        ▪ 強制的にストレッチさせてみる!
        ▪ おばか ゕプリ選手権でやりたかった → Credential Provider
          部分が間に合わず
    カスタム SmartCard 認証もできる
        たとえば…携帯の Felica
        調達しやすい自前デバ゗スで認証
    カメラ接続して画像を保存
        だれがログオンしようとしたかID付きで写真も保存
        サーバールーム等、監査に使える?

(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   18
個人向け
    Windows Live ID でPCにログオン
        疑似シンクラ゗ゕント/クラウドOSっぽく
        ユーザープロフゔ゗ルを SkyDrive やWindows
        Azure Platform(WAP)のblobやCDNに配置?
        (未検証)


    痛ログオン・ロック画面
        壁紙変えるぐらいは普通にできるんじゃね?
        ⇒ WPFでぐりぐり”嫁”を動かしたい!!
        ログオン前から”嫁”と一緒♪

(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   19
Credential Provider はログオンの要
    目的に応じてカスタマ゗ズの余地が
    残されてる
    利便性を上げることもモチロン可能
Credential Provider 弄ってその気に
なれば何でもできる
    どこまで弄るかは要注意です
    あまりやりすぎると、セキュリテゖや
    安全性を保つ、統一感を出すといった
    本質から外れるので注意(今回のデモは…)

(C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved.   20

Más contenido relacionado

Destacado

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 

Destacado (20)

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 

Tech・Ed 2010 Japan Day1 LT Kamebuchi

  • 1. Tech・Ed Japan 2010 ラ゗トニングトーク 2010.08.25 ver. 1.1 亀渕 景司
  • 2. 名前: 亀渕 景司 email: kamebuchi{at}live.jp twitter: @kamebuchi blog: http://buchizo.wordpress.com/ 略歴: IT業界在籍13年目 開発、SIいろいろ渡り歩いてます 現在はISV系IT企業で技術よりの営業支援 みたいな、なんでも屋さん (コンシェルジュ) (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 2
  • 3. Credential Provider の概要 Credential Provider をカスタマ゗ズ してみよう Credential Provider の可能性 注意 紹介するネタは Microsoft 非サポートの内容 を含みます 実践は自己責任で! (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 3
  • 4. Windows の認証機構 以前は GINA (Graphical Identification and Authentication) と呼ばれてたもの Windows NT 3.5x/4.0/2000/XP/2003 極端に言うとログ゗ン画面や CTRL+ALT+DEL 押したときに出る”アレ” Windows Vista/2008/7 は GINA からCredential Provider に変わりました (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 4
  • 5. GINA の場合 サービス等が起動するセッション0に セッション 0 WinLogon が同居 WinLogon.exe 最終的に GINA が LogonUser + GINA (DLL) 関連 API を呼び出して認証 ログオンの描画も GINA で担当 自由度高め LSASS.exe 統一感は無い (Local Security Authority Process) GINA は1つ チェーン化することも一応可能 複数のベンダーによる GINA の共存が 基本的にできない LoadLibrary と関数ポ゗ンタに依存 (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 5
  • 6. Credential Provider の場合 セッション x サービス等が起動するセッション0と LogonUI.exe 分離 Credential Credential 最終的に WinLogon が LogonUser + Provider Provider 関連 API を呼び出して認証 Credential Provider では資格情報を生成 WinLogon.exe ログオンの描画は LogonUI.exe で担当 どの UI 要素を表示するかだけを列挙 セッション 0 統一感あり LSASS.exe Credential Provider は複数OK (Local Security Authority Process) 複数のベンダーによる多様な認証を提供可能 排他じゃない COM ベースで再設計 ゗ンターフェースの実装と登録だけでOK 対話ログオン以外にも柔軟に対応 (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 6
  • 7. (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 7
  • 8. ただ弄るだけだと面白くない! 外部 EXE の実行に挑戦! (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 8
  • 9. サンプルは Windows SDK for Windows 7 and .NET Framework 4 を 利用 http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=6b6c 21d2-2006-4afa-9702-529fa782d63b “Windows SDK”で検索したほうが早い 検索結果でみると Windows SDK 7.1 5/19/2010 ゗ンストール後下記にサンプルがあります C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥security¥credentialproviders Samples のドキュメントは… Windows Vista Credential Provider Samples http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=b1b3cb d1-2d3a-4fac-982f-289f4f4b9300 MSDN マガジンの記事が凄く分かりやすい Windows Vista 用の資格情報プロバ゗ダを使用したカスタム ログ゗ン機能の作成 http://msdn.microsoft.com/ja-jp/magazine/cc163489.aspx (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 9
  • 10. サンプルは Visual Studio 2008 ⇒ Visual Studio 2010 にコンバートしても問題なし です 今回はシンプルな ”SampleCredentialProvider” を使用 CSampleProvider.cpp 内の CSampleProvider::SetUsageScenario に追記 (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 10
  • 11. CTRL+ALT+DEL キー押下 で呼び出されます ログオン画面とロック解除画面 の゗ベント時にEXEを呼び出し (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 11
  • 12. ターゲット指定は注意 x64 と x86 で配置先やレジストリの登録が 異なります ゗ンストール先のOS環境にあわせましょう (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 12
  • 13. 出来上がったDLLをWindowsフォルダへコピー レジストリを登録 レジストリフゔ゗ルはプロジェクトフォルダに同梱 他には既定の認証プロバ゗ダや 生体認証プロバ゗ダが標準で 登録されています 見たまんまCOMですね (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 13
  • 14. OLE-COM Object Viewer で確認 しつこいですがCOMですね IUnknown持ってますね ではログオフしてみて… (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 14
  • 15. (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 15
  • 16. Win32 Native 以外は非サポート つまるところ開発は C++/COM COM Interop 使ってマネージドコードで実装したりするのは 非サポート(動作はする) COM の知識があればもっと楽しい♪ C++ な COM から外部EXE呼び出したりするのは… Credential Provider はビジュゕルスタ゗ルが 利用できません Aero Glass、テーマ等 リモートデスクトップ接続時も有効です Samples 文書の Q&A に詳細が記載されてます いろいろ失敗したらあわてずセーフモードで 復旧方法もドキュメントに記載あります (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 16
  • 17. 企業向け ログオン前にいろいろ情報表示 企業からの通知の表示 ログオン日時、ネットワーク接続情報、等 Office Communicator と組み合わせてヘルプ デスクに接続 ログオン前でも対応できる ログオン画面で RDC ログオンせずにリモートデスクトップ接続 mstsc.exe を呼び出すだけで良いなら意外と簡単 (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 17
  • 18. Windows 7 なら Sensor API と連携 3軸加速度センサー使って特定の動きしたらログオン ▪ 変身ポーズでログオン! ▪ 強制的にストレッチさせてみる! ▪ おばか ゕプリ選手権でやりたかった → Credential Provider 部分が間に合わず カスタム SmartCard 認証もできる たとえば…携帯の Felica 調達しやすい自前デバ゗スで認証 カメラ接続して画像を保存 だれがログオンしようとしたかID付きで写真も保存 サーバールーム等、監査に使える? (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 18
  • 19. 個人向け Windows Live ID でPCにログオン 疑似シンクラ゗ゕント/クラウドOSっぽく ユーザープロフゔ゗ルを SkyDrive やWindows Azure Platform(WAP)のblobやCDNに配置? (未検証) 痛ログオン・ロック画面 壁紙変えるぐらいは普通にできるんじゃね? ⇒ WPFでぐりぐり”嫁”を動かしたい!! ログオン前から”嫁”と一緒♪ (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 19
  • 20. Credential Provider はログオンの要 目的に応じてカスタマ゗ズの余地が 残されてる 利便性を上げることもモチロン可能 Credential Provider 弄ってその気に なれば何でもできる どこまで弄るかは要注意です あまりやりすぎると、セキュリテゖや 安全性を保つ、統一感を出すといった 本質から外れるので注意(今回のデモは…) (C) Copyright 2010, Keiji Kamebuchi, All Rights Reserved. 20