[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:55] RE: [upki-fed:53] Re: [upki-fed:52] RE: [upki-fed:51] Re: [upki-fed:50] 【質問】Shibboleth IdP 2.1.2にしたらeduPersonTargetedIDのフォーマットが変わりますか?



秋山先生、

山形大学の伊藤です。

情報およびDEBUGありがとうございます。

バグの可能性が高そうですね。

本家としては、失効したときに、同一キーでは困るんで、
UUID Type4(乱数)にしたかったということですね。

こちらとして、困ったのは、

同じ条件、
・ハッシュのキー(salt)
・LocalEntityId(IdP)
・PeerEntityId(SP)
・LocalId
で、ComputedIDとStoredIDをでeduPersonTargetedIDを生成したときに、
異なるキーであるため、最初、ComputedIDで運用しておいて、あとで、セキュリティ
強化のために、StoredIDに移行するといった、徐々にセキュリティを強化すると
いった、運用プランが立てられないことです。

あとは、ComputedIDからStoredIDに移行した瞬間に、個人情報のプライマリ
キーが変わるんで、SP側で、eduPersonTargetedIDを個人識別子に使ってい
ると面倒なことになると思ったんです。

あと、コードを読んで、なんとなーく感じたんですが、ComputedIDとStoredIDは、
・ハッシュのキー(salt)
・PeerEntityId(SP)
・LocalId
を使って、生成されているんですね。

ということは、IdPが変更されても同じキーを生成するように設計されているんですね。

eduPersonTargetedIDの仕様が決まりましたら、教えてください
仕様に合わせて、こちらのIdPの設計に組み込みます。

山形大学としては、EPPNとeduPersonTargetedIDの2つの属性は、
プライマリキーのようなものなので、運用が始まる前に、安定させたいと考えています

以上。ありがとうございました。

> -----Original Message-----
> From: xxxxxxxxxxxxxx@xxxxxxxxx [mailto:xxxxxxxxxxxxxx@xxxxxxxxx] On
> Behalf Of Toyokazu Akiyama
> Sent: Thursday, August 20, 2009 1:03 PM
> To: xxxxxxxx@xxxxxxxxx
> Subject: [upki-fed:53] Re: [upki-fed:52] RE: [upki-fed:51] Re:
> [upki-fed:50] 【質問】Shibboleth IdP 2.1.2にしたらeduPersonTargetedID
> のフォーマットが変わりますか?
> 
> 京産大の秋山です.
> 
> ComputedID からの移行部分については全然テストできていなかったのですが,
> 開発者の意図した動作は以下のページによると,
> 
> https://spaces.internet2.edu/display/SHIB2/ResolverStoredIDDataConnect
> or
> 
> The first ID created for a given requester is always the same as those
> created by the computed ID data connector in order to provide a
> migration path from that data connector. Every subsequently generated
> ID for a given user/IdP/SP triple, if the first one is revoked, is a
> Type 4 UUID.
> 
> ということで,最初は computed ID data connector と同じ方法で
> eduPersonTargetedID
> を生成し,それ移行は UUID Type4(- で区切られたもの)を生成するらしいで
> す.
> 最初は Computed ID data connector で,次から UUID って,どういうことだ?
> と思ってた
> のですが,伊藤先生が指摘されているところを見ると,どうもちゃんと実装で
> きてない
> ですね.初回は当然 numberOfExistingEntries は 0 になるので ComputedID
> のロジックで
> persistentID が生成されるのですが,do - while のループで上書きされてい
> ました.
> # Eclipse の JPDA デバッグモードで確認しました.
> 
> もしこの方法を使うのであれば,本家にバグ報告した方がよさそうですね.
> 
> おそらく,正しい使い方としては,最初 ComputedID で登録しておいて,特定
> の SP に
> ついて UUID に移行することを決定した時点で ComputedID のエントリの
> deactivationDate
> を NOT NULL にすれば,新しく UUID のエントリが成功されて,そちらが使わ
> れるという
> ロジックなんだと思います.
> # つまりすべての SP について,1つは無効なエントリを作成する必要があ
> る?
> 
> 2009年8月20日10:53 に Tomohiro Ito<xxxxxxxx@xxxxxxxxxxxxxxxxxxx> さ
> んは書きました:
> > 山地先生
> >
> > 山形大学の伊藤です。
> > ご返事、ありがとうございます。
> >
> > こんなところにコードがあったのですね。
> >
> > なんとなーく、問題点がわかってきました。間違っているかも
> > しれませんので、詳しい方フォローしていただけると幸いです。
> > Javaは、勉強不足なものですから、間違っている可能性があります。
> >
> >
> edu.internet2.middleware.shibboleth.common.attribute.resolver.provider
> .dataC
> > onnector.StoredIDDataConnector.PersistentIdEntry
> >
> > のメソッドが変更されたようです。
> >
> > Version 1.1.2には、新たに、
> >
> >        do {
> >            log.debug("Generated persistent ID was already assigned to
> > another user, regenerating");
> >            persistentId = UUID.randomUUID().toString();
> >        } while (pidStore.getPersistentIdEntry(persistentId, false) !=
> > null);
> >
> > が追加されたようです。
> > 開発者の意図としては、既に同じ、persistent IDがデータベースにあるとき
> には、
> > 新しいUUIDをランダムに生成するようにコーディングをしたのではないで
> しょうか?
> >
> > ここからは、Javaのことが詳しくないので推測ですが、
> > JavaでDo { } while (式) 分を使うときは、
> > 最初の1ループは実行するという構文ではないでしょうか?
> >
> > ただ、この動作がShibboleth IdP 2.1.2の仕様で、全て、UUID.randowmUUID
> を使用す
> > るということで
> > あれば、正常動作と判断します。LocalEntityId、PeerEntityId、LocalId, salt
> が同
> > 一条件下で
> > 生成してみると同じIDが生成されないようで、ちょっと、気になっていま
> した。
> >
> > 以上。よろしくお願いします。
> >
> > 〇Version 1.0.0
> >
> > protected PersistentIdEntry
> createPersistentId(ShibbolethResolutionContext
> > resolutionContext, String localId,
> >            byte[] salt) throws SQLException {
> >        PersistentIdEntry entry = pidStore.new PersistentIdEntry();
> >
> >
> entry.setLocalEntityId(resolutionContext.getAttributeRequestContext().
> getLoc
> > alEntityId());
> >
> >
> entry.setPeerEntityId(resolutionContext.getAttributeRequestContext().g
> etInbo
> > undMessageIssuer());
> >
> >
> entry.setPrincipalName(resolutionContext.getAttributeRequestContext().
> getPri
> > ncipalName());
> >        entry.setLocalId(localId);
> >
> >        String persisentId;
> >        int numberOfExistingEntries =
> > pidStore.getNumberOfPersistentIdEntries(entry.getLocalEntityId(),
> entry
> >                .getPeerEntityId(), entry.getLocalId());
> >        if (numberOfExistingEntries == 0) {
> >            try {
> >                MessageDigest md = MessageDigest.getInstance("SHA");
> >                md.update(entry.getPeerEntityId().getBytes());
> >                md.update((byte) '!');
> >                md.update(localId.getBytes());
> >                md.update((byte) '!');
> >                persisentId = Base64.encodeBytes(md.digest(salt));
> >            } catch (NoSuchAlgorithmException e) {
> >                log.error("JVM error, SHA-1 is not supported, unable to
> > compute ID");
> >                throw new SQLException("SHA-1 is not supported, unable
> to
> > compute ID");
> >            }
> >        } else {
> >            persisentId = UUID.randomUUID().toString();
> >        }
> >        entry.setPersistentId(persisentId);
> >
> >        entry.setCreationTime(new
> Timestamp(System.currentTimeMillis()));
> >
> >        return entry;
> >    }
> >
> > 〇Version 1.1.2
> > protected PersistentIdEntry
> createPersistentId(ShibbolethResolutionContext
> > resolutionContext, String localId,
> >            byte[] salt) throws SQLException {
> >        PersistentIdEntry entry = pidStore.new PersistentIdEntry();
> >
> >
> entry.setLocalEntityId(resolutionContext.getAttributeRequestContext().
> getLoc
> > alEntityId());
> >
> >
> entry.setPeerEntityId(resolutionContext.getAttributeRequestContext().g
> etInbo
> > undMessageIssuer());
> >
> >
> entry.setPrincipalName(resolutionContext.getAttributeRequestContext().
> getPri
> > ncipalName());
> >        entry.setLocalId(localId);
> >
> >        String persistentId;
> >        int numberOfExistingEntries =
> > pidStore.getNumberOfPersistentIdEntries(entry.getLocalEntityId(),
> entry
> >                .getPeerEntityId(), entry.getLocalId());
> >        if (numberOfExistingEntries == 0) {
> >            try {
> >                MessageDigest md = MessageDigest.getInstance("SHA");
> >                md.update(entry.getPeerEntityId().getBytes());
> >                md.update((byte) '!');
> >                md.update(localId.getBytes());
> >                md.update((byte) '!');
> >                persistentId = Base64.encodeBytes(md.digest(salt));
> >            } catch (NoSuchAlgorithmException e) {
> >                log.error("JVM error, SHA-1 is not supported, unable to
> > compute ID");
> >                throw new SQLException("SHA-1 is not supported, unable
> to
> > compute ID");
> >            }
> >        } else {
> >            persistentId = UUID.randomUUID().toString();
> >        }
> >
> >        do {
> >            log.debug("Generated persistent ID was already assigned to
> > another user, regenerating");
> >            persistentId = UUID.randomUUID().toString();
> >        } while (pidStore.getPersistentIdEntry(persistentId, false) !=
> > null);
> >
> >        entry.setPersistentId(persistentId);
> >
> >        entry.setCreationTime(new
> Timestamp(System.currentTimeMillis()));
> >
> >        return entry;
> >    }
> >
> >> -----Original Message-----
> >> From: xxxxxxxxxxxxxx@xxxxxxxxx [mailto:xxxxxxxxxxxxxx@xxxxxxxxx] On
> >> Behalf Of xxxxxx@xxxxxxxxx
> >> Sent: Thursday, August 20, 2009 12:16 AM
> >> To: xxxxxxxx@xxxxxxxxx
> >> Subject: [upki-fed:51] Re: [upki-fed:50] 【質問】Shibboleth IdP 2.1.2
> >> にしたらeduPersonTargetedIDのフォーマットが変わりますか?
> >>
> >> ** On Wed, 19 Aug 2009 19:44:09 +0900
> >> ** Tomohiro Ito <xxxxxxxx@xxxxxxxxxxxxxxxxxxx> writes:
> >>
> >> > Shibboleth IdP 2.1.2にしたら、eduPersonTargetedIDのフォーマットが、
> >> >
> >> > 0b000ab7-2fa7-4ebf-b387-fdd63dc15cf6
> >>
> >> StoreするIDのフォーマット自体が違ったということですか?
> >> ということであれば,
> >>
> >>
> http://svn.middleware.georgetown.edu/view/java-shib-common/tags/1.0.0/
> >>
> src/edu/internet2/middleware/shibboleth/common/attribute/resolver/prov
> >> ider/dataConnector/StoredIDStore.java?view=log
> >> と
> >>
> http://svn.middleware.georgetown.edu/view/java-shib-common/tags/1.1.2/
> >>
> src/main/java/edu/internet2/middleware/shibboleth/common/attribute/res
> >> olver/provider/dataConnector/StoredIDStore.java?view=log
> >>
> >> あたりを比較したら違いがありますか?
> >> --
> >> Kazu
> >
> 
> 
> 
> --
> Toyokazu AKIYAMA
> Faculty of Computer Science and Engineering,
> Kyoto Sangyo University
> TEL/FAX: +81-75-705-1531