C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.47239 の関連記事表示
ヒット / 35件
(1-20 を表示)
<<
0
|
1
>>
■47239
正確な日時を取得するには
□投稿者/ hs -
(2010/02/22(Mon) 20:15:41)
分類:[設計/仕様]
いつもお世話になっております。
設計上どのようにすれば良いのか分からないことがあります。
現在、開発中のアプリケーションにライセンス機能を実現しようと思っております。
ライセンス情報には有効期限を設ける予定なのですが、正確な日時をどのように取得すれば良いのか困っております。
アプリケーションを使用できる条件としてインターネット接続を必須として、クライアントPC以外の日時を取得できればと考えております。もちろんこれは、クライアントPCの日時を手動で変更が可能なため、この日時では完全な有効期限を取得することが出来ないためなのですが、ネットワーク上から日時を取得する方法はないものでしょうか?
分かる方、若しくは他の考え方があればご教授ください。
よろしくお願いします。
親記事 /過去ログ80より /
関連記事表示
削除チェック/
■47240
Re[1]: 正確な日時を取得するには
□投稿者/ れい -
(2010/02/22(Mon) 20:34:00)
■
No47239
(hs さん) に返信
> いつもお世話になっております。
> 設計上どのようにすれば良いのか分からないことがあります。
>
> 現在、開発中のアプリケーションにライセンス機能を実現しようと思っております。
> ライセンス情報には有効期限を設ける予定なのですが、正確な日時をどのように取得すれば良いのか困っております。
>
> アプリケーションを使用できる条件としてインターネット接続を必須として、クライアントPC以外の日時を取得できればと考えております。もちろんこれは、クライアントPCの日時を手動で変更が可能なため、この日時では完全な有効期限を取得することが出来ないためなのですが、ネットワーク上から日時を取得する方法はないものでしょうか?
>
> 分かる方、若しくは他の考え方があればご教授ください。
> よろしくお願いします。
NTPでとったりHTTPでとったりすればよいかと。
NTPはセキュアじゃないですが、ms程度のオーダーで正確。
HTTPはセキュアにできるけど、sec程度のオーダーくらいまでしか正確ではありません。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47241
Re[2]: 正確な日時を取得するには
□投稿者/ こくぶん -
(2010/02/22(Mon) 21:10:54)
# 雑談気味
> NTPでとったりHTTPでとったりすればよいかと。
NTP サーバを偽装されたら元も子もないですね。 :p
あと、ネットにつながる=なんでも出来るワケではない事にも注意が必要かと。
例えば Outbound が TCP 80/443 しか許可されていない様なネットワークだと、 NTP は使えないです。
まぁ、認証で必要とする程度(年月日位?)であれば、 HTTP(S) 辺りで期限情報を送信するサーバを用意してそこにつなぐ、
位でいいかとは思います。
# ちなみに、 HTTP(S) にしたところで偽装は可能なので(以下略
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47251
Re[3]: 正確な日時を取得するには
□投稿者/ aetos -
(2010/02/23(Tue) 10:20:16)
■
No47241
(こくぶん さん) に返信
> # ちなみに、 HTTP(S) にしたところで偽装は可能なので(以下略
S でもできるんだっけ。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47255
Re[4]: 正確な日時を取得するには
□投稿者/ こくぶん -
(2010/02/23(Tue) 10:42:08)
■
No47251
(aetos さん) に返信
> ■
No47241
(こくぶん さん) に返信
>
>># ちなみに、 HTTP(S) にしたところで偽装は可能なので(以下略
>
> S でもできるんだっけ。
偽装というか、 hosts とか DNS をごにょごにょすれば接続先を任意に出来ちゃうので。
その場合は HTTPS だろうとなりすまし自体は可能だと思います。
但し、証明書の問題が残るので、本当に偽装出来るかは微妙ですね。
# ちゃんとした証明書を使って検証されていれば偽装はムリか。。。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47247
Re[1]: 正確な日時を取得するには
□投稿者/ Azulean -
(2010/02/23(Tue) 07:33:48)
■
No47239
(hs さん) に返信
> アプリケーションを使用できる条件としてインターネット接続を必須として、クライアントPC以外の日時を取得できればと考えております。
> もちろんこれは、クライアントPCの日時を手動で変更が可能なため、この日時では完全な有効期限を取得することが出来ないためなのですが、
> ネットワーク上から日時を取得する方法はないものでしょうか?
「正確な日付をネットワークを介して得ること」ができるのであれば、独自に用意したサーバーに対して「現在利用できるか」を問い合わせることもできそうな気がします。
# そういったインフラを用意できないというケースかどうか分からないので、とりあえず書きました。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47248
Re[2]: 正確な日時を取得するには
□投稿者/ 774RR -
(2010/02/23(Tue) 08:52:28)
クライアントが http/https を発信でき、ライセンス元サーバに接続できるという条件下であるのならば、
自社(ライセンス元)鯖にライセンスの有効無効を問い合わせるだけでよくて、
クライアント PC の日付の改竄を心配する必要はない (そんなの無駄)
パスワードプロテクトつきプロキシ経由でアクセスできるようにしておく必要はあるし
プロキシ/NAT 経由であってもクライアントを識別できる機構は必要。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47256
Re[3]: 正確な日時を取得するには
□投稿者/ 774RR -
(2010/02/23(Tue) 10:42:58)
https は2つの機能をもっているので、偽装は事実上出来ない。
・通信を開始する時点で、通信先が正しい相手であることを保証すること
・第三者が通信データを傍受しても、解読できないこと
サーバー証明書の運用が正しくないとか、
クライアント(ユーザー)がオレオレ証明書の警告を無視したとか、
まったくの新技術が開発されて現行の暗号システムが破られるとか
そういうことがあれば別。
http はそういう機構一切ないので偽装可能
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47260
Re[4]: 正確な日時を取得するには
□投稿者/ こくぶん -
(2010/02/23(Tue) 11:08:43)
■
No47256
(774RR さん) に返信
> https は2つの機能をもっているので、偽装は事実上出来ない。
> ・通信を開始する時点で、通信先が正しい相手であることを保証すること
> ・第三者が通信データを傍受しても、解読できないこと
ですね。
ひとつめの機能のことが頭からすっぽり抜けてました。。。
# ところで、自前で CA 作って該当ドメインの証明書を自作したらどうなるんだろう。。。
# 誰か教えて、偉い人(ぉ
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47265
Re[5]: 正確な日時を取得するには
□投稿者/ aetos -
(2010/02/23(Tue) 12:14:02)
■
No47260
(こくぶん さん) に返信
> # ところで、自前で CA 作って該当ドメインの証明書を自作したらどうなるんだろう。。。
> # 誰か教えて、偉い人(ぉ
# 脱線気味ですが…
正当な証明書とは、証明書チェーンをたどって行ったときにルート証明書にたどり着くものを言います。
ルート証明書の正当性は技術的には担保されておらず、OS やブラウザベンダーの判断で収録されます。
今回のケースでは、OS が持っているルート証明書を使うことも、自分でアプリ専用のルート証明書を作ってしまうこともできます。
いわゆるオレオレ証明書でも、限定目的ならば構わないわけです。
前者の場合はお金がかかりますが、後者の場合は無料です(ただし、鍵の管理は厳重にする必要があります)。
以下ほぼ余談。
ところで、アプリが証明書を検証する際には、「正当な証明書とは何か」をアプリが知っていなければなりません。
OS のルート証明書を使う場合は、判断の根拠をアプリの外部に求めることができますが、自己証明書の場合はアプリ内で判断しなければなりません。
この判断基準をどうにかして差し替えられて(クラックされて)しまうと、不正な証明書を信じ込まされてしまうかもしれません。
そのため、OS の証明書を使った方が少しは安全な気がします。
まぁ、それを言ってしまうと、コストを度外視すればクラックできないアプリはないわけで、攻撃者がどこまでコストをかけてクラックしたいかという問題になります。
ライセンス認証というのは比較的攻撃のターゲットになりやすい部分だとは思いますが、失礼ながら、作ろうとしているアプリがどれだけ人気を博すかによります。
耐攻撃性を高めるのにもコストがかかりますので、とにかく高ければいいというものではありません。
ソフトの認知度次第では、防御のためにかけたコストがまるっきり無駄になる可能性も低くはありません。
また、クラックポイントとしては証明書を差し替えるよりも、
・検証結果を無視して検証成功ロジックに誘導してしまう
・そもそも通信自体を回避して検証成功ロジックに誘導してしまう
といったものも考えられるし、その方が楽なので、あまり敏感になる必要はない気がします。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47264
Re[5]: 正確な日時を取得するには
□投稿者/ 774RR -
(2010/02/23(Tue) 12:01:18)
・攻撃者はオレオレ認証局を作っただけ(オレオレ認証局+オレオレ証明書だけがある)
・被攻撃者はオレオレ認証局について一切知らず WebUA にこれを追加していない
・公的証明機関はオレオレ認証局を認めてくれていない
状況であるなら、そのオレオレ認証局が勝手に信頼されることはないので問題ないっす。
ユーザーがだまされて WebUA の設定を変更した、つまり
[あなたが信頼する証明機関]にオレオレ認証局を追加したり
[あなたが信頼する発行元]にオレオレ証明書を追加したり
したのであれば、また話は別だけど
# なぜに WindowsUpdate で「証明書の更新」は追加の更新どまりなんだろう・・・
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47263
Re[5]: 正確な日時を取得するには
□投稿者/ .SHO -
(2010/02/23(Tue) 11:59:03)
■
No47260
(こくぶん さん) に返信
> # ところで、自前で CA 作って該当ドメインの証明書を自作したらどうなるんだろう。。。
> # 誰か教えて、偉い人(ぉ
それをオレオレ証明書って言います。
ルート証明書がない(違う)からバレます。
っていうか、該当ドメインの証明書は作れない。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47266
Re[5]: 正確な日時を取得するには
□投稿者/ aetos -
(2010/02/23(Tue) 12:16:56)
■
No47260
(こくぶん さん) に返信
> # ところで、自前で CA 作って該当ドメインの証明書を自作したらどうなるんだろう。。。
> # 誰か教えて、偉い人(ぉ
あ、これって、CA 作るのは自分(=アプリ作者)ですか? それとも他人(=悪意を持った攻撃者)ですか?
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47269
Re[6]: 正確な日時を取得するには
□投稿者/ こくぶん -
(2010/02/23(Tue) 13:15:20)
> 774RR さん、 aetos さん
余談にお付き合いいただきありがとうございました。
大体理解できました。。。
とりあえず HTTPS で偽装は出来ないと考えてよいってことで。
■
No47266
(aetos さん) に返信
> ■
No47260
(こくぶん さん) に返信
>
>># ところで、自前で CA 作って該当ドメインの証明書を自作したらどうなるんだろう。。。
>># 誰か教えて、偉い人(ぉ
>
> あ、これって、CA 作るのは自分(=アプリ作者)ですか? それとも他人(=悪意を持った攻撃者)ですか?
今回の場合は、「アプリを使う人(=ライセンスを偽装したい人<その言い方はどうかと思う)」を想定してました。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47270
Re[7]: 正確な日時を取得するには
□投稿者/ れい -
(2010/02/23(Tue) 16:01:35)
■
No47269
(こくぶん さん) に返信
>>774
RR さん、 aetos さん
>
> 余談にお付き合いいただきありがとうございました。
> 大体理解できました。。。
>
> とりあえず HTTPS で偽装は出来ないと考えてよいってことで。
ユーザーが認証サーバーを誤魔化す可能性を議論しているので、
それに「偽装」という言葉を使うと話が通じなくなりますよね。
HTTPSの話をしているときに「偽装」という単語を使ったら、
普通はサーバー側に悪意が介入する方を指しますよね。
SSLは証明書を持っている側の偽装を防ぐ技術ですから。
なので、
> 今回の場合は、「アプリを使う人(=ライセンスを偽装したい人<その言い方はどうかと思う)」を想定してました。
ここで「偽装」を使うのもmiss leadingだと思います。
結局、皆の認識は殆ど同じですよね。初めから。
・コストさえかければクライアントのクラックは絶対にできる。
・サーバー側にHTTPSを使ってもルート証明書の追加と、DNS書き換え+偽サーバーやパケット書き換えをされれば効果がない。
■
No47239
(hs さん) に返信
> 分かる方、若しくは他の考え方があればご教授ください。
結局、ユーザーのPCは100%ユーザーの管理下にあるので、
どのソフトがどう動くのか、理論上ユーザーが完全に管理できるんですよね。
もしソフト制作者側だけが管理できるようなコードやプロセス、振る舞いがあるなら、
絶対に止められないウィルスとかが作れてしまうことになります。
Webアプリならユーザーの管理下にコードがないので100%管理できますよ。
常にネットにつながってる、という条件があるので簡単でしょう。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47267
Re[6]: 正確な日時を取得するには
□投稿者/ なちゃ -
(2010/02/23(Tue) 12:45:49)
元の話題からいってユーザの悪さを防ぐ目的ですから、
例えばユーザが勝手にルート証明書でも入れたらもう防げませんね。
まあ、といってもこれは証明書の検証だけで判断した場合ですが。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47273
Re[7]: 正確な日時を取得するには
□投稿者/ hs -
(2010/02/23(Tue) 17:04:30)
今回のアプリケーションはライセンスの有効期限をユーザーのPCと比較する場合、PC日付を操作することで有効期限を操作されるのを防止したいと考えています。
たまぁに体験版のソフトでは有効期限が切れるとライセンス(購入)が必要になるものがあります。
ライセンスを購入するまでもないソフトの使用期限が切れてしまい、また使いたい時などPCの日付を操作するとそのまま使えてしまうものを見かけます。 このような事さえ防げればと考えています。
ちなみに今回もVB2008で開発なのですが、
イメージとしては以下になります。
ライセンス情報を格納したDBはクライアントPCに保管するものとし、そのDBから有効期限を取得
cn.Open
SELECT 有効期限 FROM T_License WHERE ○○○
cn.Close
'Dim dt As DateTime = Now 'これだとユーザーの操作が可能になるので×
Dim dt As DateTime = ネットワーク上から取得した現在日時を取得したい。
If dt < 有効期限 Then
MsgBox("有効期限が切れています。")
Appliaction.Exit
End If
というイメージです。
dtを取得するのは、簡単ではないのでしょうか?
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47274
Re[8]: 正確な日時を取得するには
□投稿者/ みきぬ -
(2010/02/23(Tue) 17:31:26)
■
No47273
(hs さん) に返信
> ライセンス情報を格納したDBはクライアントPCに保管するものとし、そのDBから有効期限を取得
>
クライアント側に置いたものは、ユーザによって書き換えられる可能性があります。
バイナリすら安全ではないというのに、DBが安全という理由がどこにあろうか(反語)
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47275
Re[8]: 正確な日時を取得するには
□投稿者/ .SHO -
(2010/02/23(Tue) 17:42:31)
■
No47273
(hs さん) に返信
> dtを取得するのは、簡単ではないのでしょうか?
自分で鯖立ち上げればいいいじゃん。
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
■47272
Re[7]: 正確な日時を取得するには
□投稿者/ 774RR -
(2010/02/23(Tue) 16:35:54)
要約されてしまった。御意なり。
ユーザーの手元にバイナリがあるのであれば、逆コンパイルしって認証ルーチンをスキップさせる等もできる。
以前にも違うサイトでQ&Aしたけど、結局のところこの手のプロテクトは
かける側とはずす側のコストパフォーマンス問題に過ぎない。
俺の意見としては「やるだけ無駄」「そんなくだらないことにコストをかけるぐらいなら他の品質上げろ」だね
記事No.47239 のレス /過去ログ80より /
関連記事表示
削除チェック/
次の20件>
<<
0
|
1
>>
パスワード/
-
Child Tree
-