diff --git a/src/security/pib/identity.cpp b/src/security/pib/identity.cpp
index 79cb090..0f7dc26 100644
--- a/src/security/pib/identity.cpp
+++ b/src/security/pib/identity.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -103,6 +103,24 @@
   return impl;
 }
 
+bool
+operator!=(const Identity& lhs, const Identity& rhs)
+{
+  return lhs.m_impl.owner_before(rhs.m_impl) || rhs.m_impl.owner_before(lhs.m_impl);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Identity& id)
+{
+  if (id) {
+    os << id.getName();
+  }
+  else {
+    os << "(empty)";
+  }
+  return os;
+}
+
 } // namespace pib
 } // namespace security
 } // namespace ndn
diff --git a/src/security/pib/identity.hpp b/src/security/pib/identity.hpp
index cc46bfd..228ef16 100644
--- a/src/security/pib/identity.hpp
+++ b/src/security/pib/identity.hpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -100,6 +100,7 @@
   /*
    * @return True if the identity instance is valid
    */
+  explicit
   operator bool() const;
 
   /**
@@ -157,8 +158,21 @@
   weak_ptr<detail::IdentityImpl> m_impl;
 
   friend class v2::KeyChain;
+  friend bool operator!=(const Identity&, const Identity&);
 };
 
+bool
+operator!=(const Identity& lhs, const Identity& rhs);
+
+inline bool
+operator==(const Identity& lhs, const Identity& rhs)
+{
+  return !(lhs != rhs);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Identity& id);
+
 } // namespace pib
 
 using pib::Identity;
diff --git a/src/security/pib/key.cpp b/src/security/pib/key.cpp
index 3d7b83c..7396a5a 100644
--- a/src/security/pib/key.cpp
+++ b/src/security/pib/key.cpp
@@ -123,6 +123,24 @@
   return impl;
 }
 
+bool
+operator!=(const Key& lhs, const Key& rhs)
+{
+  return lhs.m_impl.owner_before(rhs.m_impl) || rhs.m_impl.owner_before(lhs.m_impl);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Key& key)
+{
+  if (key) {
+    os << key.getName();
+  }
+  else {
+    os << "(empty)";
+  }
+  return os;
+}
+
 } // namespace pib
 
 namespace v2 {
diff --git a/src/security/pib/key.hpp b/src/security/pib/key.hpp
index 90f4f5c..fbbed24 100644
--- a/src/security/pib/key.hpp
+++ b/src/security/pib/key.hpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -125,6 +125,7 @@
   /**
    * @brief Check if the Key instance is valid.
    */
+  explicit
   operator bool() const;
 
   /**
@@ -181,8 +182,21 @@
   weak_ptr<detail::KeyImpl> m_impl;
 
   friend class v2::KeyChain;
+  friend bool operator!=(const Key&, const Key&);
 };
 
+bool
+operator!=(const Key& lhs, const Key& rhs);
+
+inline bool
+operator==(const Key& lhs, const Key& rhs)
+{
+  return !(lhs != rhs);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Key& key);
+
 } // namespace pib
 
 using pib::Key;
